sql >> Databáze >  >> RDS >> Mysql

Vytvořte vlastní způsob dopravy v OpenCart:Část druhá

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!


  1. Unikání jednoduché uvozovky v PLSQL

  2. Jak vrátit levou nebo pravou část řetězce v MySQL

  3. Jaký je nejlepší způsob, jak uniknout neformátovým znakům v to_char společnosti Oracle?

  4. Když autovakuum nevysává