W tej serii omawiamy implementację niestandardowego modułu metody wysyłki w OpenCart. W pierwszej części włączyliśmy i skonfigurowaliśmy naszą niestandardową metodę wysyłki za pomocą formularza konfiguracyjnego na zapleczu. Dzisiaj zaimplementujemy pliki wymagane przez OpenCart, aby mógł wykryć niestandardową metodę wysyłki i wyświetlić ją wraz z innymi włączonymi metodami wysyłki podczas realizacji zakupu.
Mam nadzieję, że stworzyłeś wszystkie pliki z pierwszej części tej serii. Jeśli nie przerobiłeś jeszcze pierwszej części, zachęcam Cię do przejrzenia tego, zanim przejdziesz dalej. Zakładam również, że używasz najnowszej wersji OpenCart.
Rzut oka na konfigurację plików w interfejsie
Zacznijmy od listy plików wymaganych w interfejsie użytkownika.
catalog/language/english/shipping/custom.php
:To plik językowy, w którym zdefiniujemy etykiety.catalog/model/shipping/custom.php
:Jest to plik modelu, co jest ważne, ponieważ większość logiki obliczania kosztów wysyłki znajduje się tutaj.
To tyle, jeśli chodzi o konfigurację front-endu.
Konfiguracja pliku
Zacznijmy od konfiguracji pliku językowego.
Utwórz plik językowy
Utwórz plik catalog/language/english/shipping/custom.php
i wklej następującą zawartość do tego pliku.
<?php // Text $_['text_title'] = 'Custom Rate'; $_['text_description'] = 'Custom Shipping Rate';
Myślę, że nie wymaga to żadnego wyjaśnienia, więc przejdźmy dalej!
Utwórz plik modelu
Utwórz plik catalog/model/shipping/custom.php
i wklej następującą zawartość do tego pliku.
<?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; } }
Zgodnie z konwencją OpenCart nazwa klasy powinna brzmieć ModelShippingCustom
i jest getQuote
metoda, która jest niezbędna, aby nasza metoda wysyłki została odebrana przez OpenCart.
Powinieneś zauważyć, że $address
argument jest przekazywany w getQuote
sposób wysyłki, którym jest adres wysyłki klienta podczas realizacji transakcji i pozwala nam zdecydować, czy aktualna metoda wysyłki ma zastosowanie do strefy geograficznej należącej do tego adresu. Decyduje o tym następujący kod.
$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; }
Następnie, jeśli metoda wysyłki ma zastosowanie, przygotowujemy wymagane zmienne tablicowe zgodnie z konwencjami.
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 ); }
Jak widać, używamy $this->config->get
metoda ładowania wartości zmiennych konfiguracyjnych, takich jak „custom_cost”, „custom_tax_class_id” i „custom_sort_order”. Przypomnij sobie pierwszą część, w której skonfigurowaliśmy te wartości za pomocą niestandardowego formularza konfiguracji!
Ważnym fragmentem do zauważenia jest również wartość text
klucz w $quote_data
szyk. Oblicza i formatuje całkowitą kwotę, która zostanie naliczona za naszą niestandardową metodę wysyłki. W szczególności sprawdza, czy do „kosztu” metody wysyłki należy doliczyć dodatkowy podatek. Przypomnij klasę podatkową ustawienie, które podaliśmy w naszym formularzu konfiguracyjnym, w którym wybraliśmy Towary podlegające opodatkowaniu . W związku z tym do całkowitej kwoty metody wysyłki dodany zostanie dodatkowy podatek!
Staraliśmy się, aby nasz model był prosty, ale możesz wykonać wszystkie obliczenia w tym pliku zgodnie z interfejsami API metody wysyłki, jeśli takie istnieją. To tyle, jeśli chodzi o część modelową.
Demo w interfejsie
W interfejsie dodaj kilka produktów do koszyka i rozpocznij proces kasy. W Kroku 4:Metoda dostawy , powinieneś być w stanie zobaczyć naszą niestandardową metodę wysyłki wymienioną na poniższym zrzucie ekranu.
Jest wymieniony z tytułem „Niestandardowa stawka wysyłki – 14,00 USD” . Możesz być zaskoczony, że chociaż skonfigurowaliśmy Koszt parametr na 10 , pokazuje 14 na liście. Jak wspomniałem wcześniej, skonfigurowaliśmy towary podlegające opodatkowaniu w klasie podatkowej pole w formularzu konfiguracyjnym na zapleczu.
Przejdź do Lokalizacja> Podatki> Klasy podatkowe i edytuj Towary podlegające opodatkowaniu . Zobaczysz, że 20% VAT i płaskie 2$ Podatek ekologiczny są skonfigurowane dla tej klasy podatkowej. W ten sposób dodaje kolejne 4 USD do kosztu metody wysyłki! Oczywiście, jeśli ustawisz klasę podatkową do żadnego, podatek w ogóle nie zostanie naliczony!
Więc to tyle na dzisiaj. Teraz pomyślnie stworzyliśmy w pełni rozwinięty moduł niestandardowej metody wysyłki w OpenCart!