V této sérii diskutujeme o implementaci modulu vlastní metody dopravy v OpenCart. V první části jsme povolili a nakonfigurovali náš vlastní způsob dopravy pomocí konfiguračního formuláře v back-endu. Dnes implementujeme soubory, které vyžaduje OpenCart, aby mohl rozpoznat vlastní způsob dopravy a uvést jej spolu s ostatními povolenými způsoby dopravy při placení.
Doufám, že jste vytvořili všechny soubory z prvního dílu této série. Pokud jste si ještě neprošli první částí, doporučuji vám ji projít, než budete pokračovat dále. Také předpokládám, že používáte nejnovější verzi OpenCart.
Pohled do nastavení souboru v rozhraní front-end
Začněme seznamem souborů požadovaných ve front-endu.
catalog/language/english/shipping/custom.php
:Je to jazykový soubor, ve kterém budeme definovat popisky.catalog/model/shipping/custom.php
:Jedná se o soubor modelu, který je důležitý, protože většina logiky výpočtu přepravy je zde.
Takže to je, pokud jde o nastavení front-endu.
Nastavení souboru
Začněme nastavením jazykového souboru.
Vytvořte jazykový soubor
Vytvořte soubor catalog/language/english/shipping/custom.php
a vložte do tohoto souboru následující obsah.
<?php // Text $_['text_title'] = 'Custom Rate'; $_['text_description'] = 'Custom Shipping Rate';
Myslím, že to nevyžaduje žádné vysvětlení, takže pojďme dál!
Vytvořte soubor modelu
Vytvořte soubor catalog/model/shipping/custom.php
a vložte do tohoto souboru následující obsah.
<?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; } }
Podle konvencí OpenCart by název třídy měl být ModelShippingCustom
a je tam getQuote
způsob, který je nezbytný pro náš způsob dopravy, který má být vyzvednut OpenCart.
Měli byste si všimnout, že $address
argument je předán v getQuote
způsob, což je dodací adresa zákazníka při placení, a umožňuje nám rozhodnout, zda je aktuální způsob dopravy použitelný pro geografickou zónu patřící k této adrese. Rozhoduje o tom následující kód.
$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; }
Dále, pokud je použitelný způsob dopravy, připravíme požadované proměnné pole podle konvencí.
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 vidíte, používáme $this->config->get
metodu pro načtení hodnot pro konfigurační proměnné jako "custom_cost", "custom_tax_class_id" a "custom_sort_order". Připomeňme si první část, ve které jsme tyto hodnoty konfigurovali pomocí vlastního konfiguračního formuláře!
Důležitým úryvkem, kterého je třeba si povšimnout, je také hodnota text
zadejte $quote_data
pole. Vypočítá a naformátuje celkovou částku, která bude účtována za náš vlastní způsob dopravy. Konkrétně kontroluje, zda by se k „nákladům“ způsobu dopravy neměla připočítat nějaká další daň. Připomeňte si Třídu daně nastavení, které jsme uvedli v našem konfiguračním formuláři, ve kterém jsme vybrali Zdanitelné zboží . K celkové částce za způsob dopravy tedy přidá další daň!
Snažili jsme se, aby naše modelová část byla jednoduchá, ale můžete provést všechny výpočty v tomto souboru podle vašich API způsobu dopravy, pokud existují. Takže to je, co se modelové části týče.
Ukázka v rozhraní front-end
Ve front-endu přidejte do košíku několik produktů a spusťte proces pokladny. V Kroku 4:Způsob doručení , měli byste vidět náš vlastní způsob dopravy uvedený na následujícím snímku obrazovky.
Je uvedena s názvem „Vlastní sazba za dopravu – 14,00 $“ . Možná vás překvapí, že ačkoli jsme nakonfigurovali Cena parametr na 10 , ukazuje 14 v seznamu. Jak jsem již zmínil, nakonfigurovali jsme Zdanitelné zboží v Daňové třídě pole v konfiguračním formuláři v back-endu.
Přejděte na Lokalizace> Daně> Daňové třídy a upravit Zdanitelné zboží . Uvidíte, že 20% DPH a byt 2 $ Ekologická daň jsou nakonfigurovány pro tuto daňovou třídu. K nákladům na způsob dopravy tedy přidává další 4 $! Samozřejmě, pokud nastavíte Třída daně na Žádný daň nebude uplatněna vůbec!
Tak a to je pro dnešek vše. Nyní jsme úspěšně vytvořili plnohodnotný vlastní modul způsobu dopravy v OpenCart!