Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen Sie eine benutzerdefinierte Versandmethode in OpenCart:Part Two

In dieser Serie diskutieren wir die Implementierung eines benutzerdefinierten Versandmethodenmoduls in OpenCart. Im ersten Teil haben wir unsere benutzerdefinierte Versandmethode mithilfe des Konfigurationsformulars im Backend aktiviert und konfiguriert. Heute werden wir die Dateien implementieren, die von OpenCart benötigt werden, damit es die benutzerdefinierte Versandmethode erkennen und sie zusammen mit den anderen aktivierten Versandmethoden während des Bezahlvorgangs auflisten kann.

Ich hoffe, dass Sie alle Dateien aus dem ersten Teil dieser Serie erstellt haben. Wenn Sie den ersten Teil noch nicht durchgearbeitet haben, würde ich Sie ermutigen, diesen durchzugehen, bevor Sie fortfahren. Außerdem gehe ich davon aus, dass Sie die neueste Version von OpenCart verwenden.

Ein Blick auf die Dateieinrichtung im Frontend

Beginnen wir mit einer Liste der Dateien, die im Frontend benötigt werden.

  • catalog/language/english/shipping/custom.php :Es ist eine Sprachdatei, in der wir die Labels definieren werden.
  • catalog/model/shipping/custom.php :Es handelt sich um eine Modelldatei, die wichtig ist, da hier der Großteil der Versandberechnungslogik abläuft.

Soweit die Front-End-Einrichtung.

Dateieinrichtung

Beginnen wir mit der Einrichtung der Sprachdatei.

Sprachdatei erstellen

Erstellen Sie eine Datei catalog/language/english/shipping/custom.php und fügen Sie den folgenden Inhalt in diese Datei ein.

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

Ich glaube nicht, dass es einer Erklärung bedarf, also machen wir weiter!

Erstellen Sie eine Modelldatei

Erstellen Sie eine Datei catalog/model/shipping/custom.php und fügen Sie den folgenden Inhalt in diese Datei ein.

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

Gemäß den OpenCart-Konventionen sollte der Klassenname ModelShippingCustom sein und es gibt ein getQuote Methode, die ein Muss für unsere Versandmethode ist, um von OpenCart abgeholt zu werden.

Sie sollten beachten, dass die $address Argument wird in getQuote übergeben Methode, die die Lieferadresse des Kunden während des Bestellvorgangs ist, und ermöglicht uns zu entscheiden, ob die aktuelle Versandmethode für die zu dieser Adresse gehörende Geozone anwendbar ist. Dies wird durch den folgenden Code entschieden.

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

Wenn die Versandmethode anwendbar ist, bereiten wir als Nächstes die erforderlichen Array-Variablen gemäß den Konventionen vor.

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

Wie Sie sehen, verwenden wir $this->config->get -Methode, um die Werte für die Konfigurationsvariablen wie "custom_cost", "custom_tax_class_id" und "custom_sort_order" zu laden. Erinnern Sie sich an den ersten Teil, in dem wir diese Werte mit dem benutzerdefinierten Konfigurationsformular konfiguriert haben!

Ein wichtiges Snippet ist auch der Wert des text Geben Sie die $quote_data ein Reihe. Es berechnet und formatiert den Gesamtbetrag, der für unsere benutzerdefinierte Versandmethode berechnet wird. Insbesondere prüft es, ob zusätzliche Steuern zu den "Kosten" der Versandart hinzugefügt werden sollten. Rufen Sie die Steuerklasse auf Einstellung, die wir in unserem Konfigurationsformular bereitgestellt haben, in dem wir Steuerpflichtige Waren ausgewählt haben . Daher wird dem Gesamtbetrag der Versandart eine zusätzliche Steuer hinzugefügt!

Wir haben versucht, unseren Modellteil einfach zu halten, aber Sie könnten alle Berechnungen in dieser Datei gemäß Ihren APIs für Versandmethoden durchführen, falls vorhanden. Soweit zum Modellteil.

Demo im Frontend

Legen Sie im Frontend einige Produkte in den Warenkorb und starten Sie den Bestellvorgang. In Schritt 4:Liefermethode , sollten Sie unsere benutzerdefinierte Versandmethode sehen können, wie im folgenden Screenshot gezeigt.

Es wird mit dem Titel "Benutzerdefinierter Versandpreis - 14,00 $" aufgeführt . Sie werden überrascht sein, dass wir die Kosten zwar konfiguriert haben Parameter auf 10 , es wird 14 angezeigt In der Liste. Wie ich bereits erwähnt habe, haben wir Steuerpflichtige Waren konfiguriert in der Steuerklasse Feld im Konfigurationsformular im Backend.

Navigieren Sie zu Lokalisierung> Steuern> Steuerklassen , und bearbeiten Sie Steuerpflichtige Waren . Sie werden diese 20 % Mehrwertsteuer sehen und pauschal 2$ Ökosteuer sind für diese Steuerklasse konfiguriert. Somit werden die Kosten für die Versandart um weitere 4 $ erhöht! Natürlich, wenn Sie Steuerklasse festlegen auf Keine Steuer wird überhaupt nicht erhoben!

So, das war es für heute. Wir haben jetzt erfolgreich ein vollwertiges Modul für benutzerdefinierte Versandmethoden in OpenCart erstellt!