Dalam seri ini, kita membahas implementasi modul metode pengiriman kustom di OpenCart. Pada bagian pertama, kami mengaktifkan dan mengonfigurasi metode pengiriman khusus kami menggunakan formulir konfigurasi di bagian belakang. Hari ini, kami akan menerapkan file yang diperlukan oleh OpenCart agar dapat mendeteksi metode pengiriman kustom dan mencantumkannya bersama dengan metode pengiriman lain yang diaktifkan selama pembayaran.
Saya harap Anda telah membuat semua file dari bagian pertama seri ini. Jika Anda belum melalui bagian pertama, saya akan mendorong Anda untuk melewatinya sebelum melanjutkan lebih jauh. Juga, saya berasumsi bahwa Anda menggunakan OpenCart versi terbaru.
Sekilas Pengaturan File di Front-End
Mari kita mulai dengan daftar file yang diperlukan di front-end.
catalog/language/english/shipping/custom.php
:Ini adalah file bahasa tempat kita akan mendefinisikan labelnya.catalog/model/shipping/custom.php
:Ini adalah file model, yang penting karena sebagian besar logika perhitungan pengiriman ada di sini.
Jadi itu saja sejauh menyangkut penyiapan front-end.
Pengaturan File
Mari kita mulai dengan penyiapan file bahasa.
Buat File Bahasa
Buat file catalog/language/english/shipping/custom.php
dan tempel konten berikut di file itu.
<?php // Text $_['text_title'] = 'Custom Rate'; $_['text_description'] = 'Custom Shipping Rate';
Saya tidak berpikir itu memerlukan penjelasan apa pun, jadi mari kita lanjutkan!
Buat File Model
Buat file catalog/model/shipping/custom.php
dan tempel konten berikut di file itu.
<?php class ModelShippingCustom extends Model { function getQuote($address) { $this->load->language('shipping/custom'); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('custom_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')"); if (!$this->config->get('custom_geo_zone_id')) { $status = true; } elseif ($query->num_rows) { $status = true; } else { $status = false; } $method_data = array(); if ($status) { $quote_data = array(); $quote_data['custom'] = array( 'code' => 'custom.custom', 'title' => $this->language->get('text_description'), 'cost' => $this->config->get('custom_cost'), 'tax_class_id' => $this->config->get('custom_tax_class_id'), 'text' => $this->currency->format($this->tax->calculate($this->config->get('custom_cost'), $this->config->get('custom_tax_class_id'), $this->config->get('config_tax'))) ); $method_data = array( 'code' => 'custom', 'title' => $this->language->get('text_title'), 'quote' => $quote_data, 'sort_order' => $this->config->get('custom_sort_order'), 'error' => false ); } return $method_data; } }
Sesuai dengan konvensi OpenCart, nama kelas harus ModelShippingCustom
dan ada getQuote
metode yang merupakan keharusan agar metode pengiriman kami diambil oleh OpenCart.
Anda harus memperhatikan bahwa $address
argumen dilewatkan di getQuote
metode, yang merupakan alamat pengiriman pelanggan selama checkout, dan memungkinkan kami untuk memutuskan apakah metode pengiriman saat ini berlaku untuk zona geografis milik alamat tersebut. Ini ditentukan oleh kode berikut.
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('custom_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')"); if (!$this->config->get('custom_geo_zone_id')) { $status = true; } elseif ($query->num_rows) { $status = true; } else { $status = false; }
Selanjutnya, jika metode pengiriman dapat diterapkan, kami menyiapkan variabel array yang diperlukan sesuai dengan konvensi.
if ($status) { $quote_data = array(); $quote_data['custom'] = array( 'code' => 'custom.custom', 'title' => $this->language->get('text_description'), 'cost' => $this->config->get('custom_cost'), 'tax_class_id' => $this->config->get('custom_tax_class_id'), 'text' => $this->currency->format($this->tax->calculate($this->config->get('custom_cost'), $this->config->get('custom_tax_class_id'), $this->config->get('config_tax'))) ); $method_data = array( 'code' => 'custom', 'title' => $this->language->get('text_title'), 'quote' => $quote_data, 'sort_order' => $this->config->get('custom_sort_order'), 'error' => false ); }
Seperti yang Anda lihat, kami menggunakan $this->config->get
metode untuk memuat nilai untuk variabel konfigurasi seperti "custom_cost", "custom_tax_class_id" dan "custom_sort_order". Ingat bagian pertama, di mana kita mengonfigurasi nilai-nilai ini menggunakan formulir konfigurasi khusus!
Selain itu, cuplikan penting yang perlu diperhatikan adalah nilai text
masukkan $quote_data
Himpunan. Ini menghitung dan memformat jumlah total yang akan dikenakan biaya untuk metode pengiriman kustom kami. Secara khusus, ia memeriksa apakah ada pajak tambahan yang harus ditambahkan ke "biaya" metode pengiriman. Ingat Kelas Pajak pengaturan yang kami sediakan di formulir konfigurasi kami, di mana kami memilih Barang Kena Pajak . Jadi, ini akan menambah pajak tambahan ke jumlah total metode pengiriman!
Kami telah mencoba untuk menjaga bagian model kami tetap sederhana, tetapi Anda dapat melakukan semua perhitungan dalam file ini sesuai dengan API metode pengiriman Anda jika ada. Jadi itu saja sejauh menyangkut bagian model.
Demo di Front-End
Di front-end, tambahkan beberapa produk ke keranjang dan mulai proses checkout. Dalam Langkah 4:Metode Pengiriman , Anda seharusnya dapat melihat metode pengiriman khusus kami yang terdaftar seperti yang ditunjukkan pada tangkapan layar berikut.
Terdaftar dengan judul "Tarif Pengiriman Khusus - $14.00" . Anda mungkin terkejut bahwa meskipun kami mengonfigurasi Biaya parameter ke 10 , itu menunjukkan 14 dalam daftar. Seperti yang saya sebutkan sebelumnya, kami mengonfigurasi Barang Kena Pajak di Kelas Pajak bidang dalam formulir konfigurasi di back-end.
Navigasikan ke Lokalisasi> Pajak> Kelas Pajak , dan edit Barang Kena Pajak . Anda akan melihat bahwa PPN 20% dan 2$ flat datar Pajak Ramah Lingkungan dikonfigurasi untuk kelas pajak ini. Dengan demikian, ia menambahkan $ 4 lebih lanjut ke biaya metode pengiriman! Tentu saja, jika Anda menetapkan Kelas Pajak menjadi Tidak ada, pajak tidak akan dikenakan sama sekali!
Jadi, itu saja untuk hari ini. Kami sekarang telah berhasil membuat modul metode pengiriman kustom yang lengkap di OpenCart!