В тази серия обсъждаме внедряването на модул за персонализиран метод на доставка в OpenCart. В първата част активирахме и конфигурирахме нашия персонализиран метод за доставка, използвайки формата за конфигурация в задния край. Днес ще внедрим файловете, които се изискват от OpenCart, така че да може да открие персонализирания метод на доставка и да го изведе заедно с другите активирани методи за доставка по време на плащането.
Надявам се, че сте създали всички файлове от първата част на тази серия. Ако все още не сте преминали през първата част, бих ви насърчил да преминете през нея, преди да продължите по-нататък. Освен това предполагам, че използвате най-новата версия на OpenCart.
Поглед към настройката на файла в предния край
Нека започнем със списък на файловете, необходими в предния край.
catalog/language/english/shipping/custom.php
:Това е езиков файл, в който ще дефинираме етикетите.catalog/model/shipping/custom.php
:Това е файл с модел, който е важен, тъй като по-голямата част от логиката за изчисляване на доставката е тук.
Това е всичко, що се отнася до настройката на предния край.
Настройка на файл
Нека започнем с настройката на езиковия файл.
Създайте езиков файл
Създайте файл catalog/language/english/shipping/custom.php
и поставете следното съдържание в този файл.
<?php // Text $_['text_title'] = 'Custom Rate'; $_['text_description'] = 'Custom Shipping Rate';
Не мисля, че изисква обяснение, така че да продължим напред!
Създайте файл с модел
Създайте файл catalog/model/shipping/custom.php
и поставете следното съдържание в този файл.
<?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; } }
Съгласно конвенциите на OpenCart името на класа трябва да бъде ModelShippingCustom
и има getQuote
метод, който е задължителен за нашия начин на доставка, за да бъде взет от OpenCart.
Трябва да забележите, че $address
Аргументът се предава в getQuote
метод, който е адресът за доставка на клиента по време на плащането и ни позволява да решим дали текущият метод на доставка е приложим за географската зона, принадлежаща на този адрес. Това се решава от следния код.
$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; }
След това, ако методът на доставка е приложим, ние подготвяме необходимите променливи на масива съгласно конвенциите.
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 ); }
Както можете да видите, ние използваме $this->config->get
метод за зареждане на стойностите за конфигурационните променливи като "custom_cost", "custom_tax_class_id" и "custom_sort_order". Припомнете си първата част, в която конфигурирахме тези стойности с помощта на персонализирания формуляр за конфигурация!
Също така важен фрагмент, който трябва да забележите, е стойността на text
въведете $quote_data
масив. Той изчислява и форматира общата сума, която ще бъде таксувана за нашия персонализиран метод на доставка. По-конкретно, той проверява дали към „цената“ на метода на доставка трябва да се добави допълнителен данък. Припомнете си Данъчен клас настройка, която предоставихме в нашия формуляр за конфигурация, в който избрахме Облагаеми стоки . По този начин той ще добави допълнителен данък към общата сума на метода на доставка!
Опитахме се да запазим нашата част от модела проста, но можете да направите всички изчисления в този файл според API за вашия метод на доставка, ако има такива. Това е всичко, що се отнася до частта за модела.
Демо в предния край
В предния край добавете няколко продукта в количката и започнете процеса на плащане. В Стъпка 4:Метод на доставка , трябва да можете да видите нашия персонализиран метод за доставка, изброен, както е показано на следващата екранна снимка.
Посочен е със заглавие „Персонализирана тарифа за доставка – $14,00“ . Може да се изненадате, че въпреки че сме конфигурирали Цената параметър до 10 , показва 14 в списъка. Както споменах по-рано, конфигурирахме Облагаеми стоки в Данъчен клас поле във формата за конфигурация в задния край.
Придвижете се до Локализация> Данъци> Данъчни класове и редактирайте Облагаеми стоки . Ще видите този 20% ДДС и плосък 2$ Еко данък са конфигурирани за този данъчен клас. По този начин той добавя още $4 към цената на метода на доставка! Разбира се, ако зададете Данъчен клас до Няма данък изобщо няма да се прилага!
И така, това е всичко за днес. Вече успешно създадохме пълноправен модул за персонализиран метод на доставка в OpenCart!