sql >> Database >  >> RDS >> Mysql

Maak een aangepaste verzendmethode in OpenCart:deel twee

In deze serie bespreken we de implementatie van een aangepaste verzendmethodemodule in OpenCart. In het eerste deel hebben we onze aangepaste verzendmethode ingeschakeld en geconfigureerd met behulp van het configuratieformulier in de back-end. Vandaag implementeren we de bestanden die OpenCart nodig heeft, zodat het de aangepaste verzendmethode kan detecteren en deze samen met de andere ingeschakelde verzendmethoden kan weergeven tijdens het afrekenen.

Ik hoop dat je alle bestanden van het eerste deel van deze serie hebt gemaakt. Als je het eerste deel nog niet hebt doorlopen, raad ik je aan dat eerst door te nemen voordat je verder gaat. Ik neem ook aan dat je de nieuwste versie van OpenCart gebruikt.

Een blik op de bestandsinstellingen in de front-end

Laten we beginnen met een lijst van de bestanden die nodig zijn in de front-end.

  • catalog/language/english/shipping/custom.php :Het is een taalbestand waarin we de labels definiëren.
  • catalog/model/shipping/custom.php :Het is een modelbestand, wat belangrijk is omdat de meeste logica voor verzendingsberekening hier naartoe gaat.

Dus dat was het wat betreft de front-end setup.

Bestandsconfiguratie

Laten we beginnen met het instellen van de taalbestanden.

Maak een taalbestand

Maak een bestand catalog/language/english/shipping/custom.php en plak de volgende inhoud in dat bestand.

<?php
// Text
$_['text_title']       = 'Custom Rate';
$_['text_description'] = 'Custom Shipping Rate';

Ik denk dat er geen uitleg voor nodig is, dus laten we verder gaan!

Een modelbestand maken

Maak een bestand catalog/model/shipping/custom.php en plak de volgende inhoud in dat bestand.

<?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;
  }
}

Volgens de OpenCart-conventies moet de klassenaam ModelShippingCustom zijn en er is een getQuote methode die een must is voor onze verzendmethode om door OpenCart te worden opgehaald.

U zou moeten opmerken dat de $address argument wordt doorgegeven in de getQuote methode, het verzendadres van de klant tijdens het afrekenen, en het stelt ons in staat om te beslissen of de huidige verzendmethode van toepassing is op de geozone die bij dat adres hoort. Het wordt bepaald door de volgende code.

$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;
}

Vervolgens, als de verzendmethode van toepassing is, bereiden we de vereiste arrayvariabelen voor volgens de conventies.

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
  );
}

Zoals je kunt zien, gebruiken we de $this->config->get methode om de waarden voor de configuratievariabelen zoals "custom_cost", "custom_tax_class_id" en "custom_sort_order" te laden. Denk aan het eerste deel, waarin we deze waarden hebben geconfigureerd met behulp van het aangepaste configuratieformulier!

Een belangrijk fragment om op te merken is ook de waarde van de text toets de $quote_data . in reeks. Het berekent en formatteert het totale bedrag dat in rekening wordt gebracht voor onze aangepaste verzendmethode. Het controleert met name of er extra belasting moet worden toegevoegd aan de "kosten" van de verzendmethode. Denk aan de Belastingklasse instelling die we hebben opgegeven in ons configuratieformulier, waarin we Belastbare goederen . hebben geselecteerd . Het voegt dus een extra belasting toe aan het totale bedrag van de verzendmethode!

We hebben geprobeerd ons modelonderdeel eenvoudig te houden, maar u kunt alle berekeningen in dit bestand uitvoeren volgens de eventuele API's van uw verzendmethode. Dus dat was het wat het modelonderdeel betreft.

Demo in de front-end

Voeg in de front-end een paar producten toe aan de winkelwagen en start het afrekenproces. In Stap 4:Aflevermethode , zou u onze aangepaste verzendmethode moeten kunnen zien zoals weergegeven in de volgende schermafbeelding.

Het wordt vermeld met de titel "Aangepast verzendtarief - $ 14,00" . Het zal je misschien verbazen dat hoewel we de Kosten . hebben geconfigureerd parameter naar 10 , het toont 14 in de lijst. Zoals ik eerder al zei, hebben we Belastbare goederen . geconfigureerd in de Belastingklasse veld in het configuratieformulier in de back-end.

Navigeer naar Lokalisatie> Belastingen> Belastingklassen , en bewerk Belastbare goederen . U zult zien dat 20% btw en een platte 2$ Eco-belasting zijn geconfigureerd voor deze belastingklasse. Het voegt dus nog eens $ 4 toe aan de kosten van de verzendmethode! Natuurlijk, als u Belastingklasse . instelt tot Geen, Er wordt helemaal geen belasting geheven!

Zo, dat was het dan voor vandaag. We hebben nu met succes een volwaardige module voor aangepaste verzendmethodes gemaakt in OpenCart!


  1. Ontdek vrije ruimte op tablespace

  2. Tracefiles verwijderen met ADRCI

  3. Hoe te controleren of een opgeslagen procedure bestaat voordat u deze maakt?

  4. Hoe een Oracle PL/SQL-object supermethode aan te roepen