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!