sql >> Databasteknik >  >> RDS >> Mysql

Skapa en anpassad fraktmetod i OpenCart:Del två

I den här serien diskuterar vi implementeringen av en anpassad fraktmetodmodul i OpenCart. I den första delen aktiverade och konfigurerade vi vår anpassade leveransmetod med hjälp av konfigurationsformuläret i back-end. Idag implementerar vi filerna som krävs av OpenCart så att den kan upptäcka den anpassade fraktmetoden och lista den tillsammans med de andra aktiverade fraktmetoderna under kassan.

Jag hoppas att du har skapat alla filer från den första delen av den här serien. Om du inte har gått igenom den första delen ännu, skulle jag uppmuntra dig att gå igenom det innan du går vidare. Jag antar också att du använder den senaste versionen av OpenCart.

En blick på filinställningarna i front-end

Låt oss börja med en lista över de filer som krävs i front-end.

  • catalog/language/english/shipping/custom.php :Det är en språkfil där vi definierar etiketterna.
  • catalog/model/shipping/custom.php :Det är en modellfil, vilket är viktigt eftersom det mesta av logiken för fraktberäkningen går här.

Så det är det när det gäller front-end-konfigurationen.

Filinställningar

Låt oss börja med språkfilinställningarna.

Skapa en språkfil

Skapa en fil catalog/language/english/shipping/custom.php och klistra in följande innehåll i den filen.

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

Jag tror inte att det kräver någon förklaring, så låt oss gå vidare!

Skapa en modellfil

Skapa en fil catalog/model/shipping/custom.php och klistra in följande innehåll i den filen.

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

Enligt OpenCart-konventionerna ska klassnamnet vara ModelShippingCustom och det finns en getQuote metod som är ett måste för att vår fraktmetod ska hämtas av OpenCart.

Du bör lägga märke till att $address argumentet skickas i getQuote metod, som är kundens leveransadress vid kassan, och den låter oss bestämma om den aktuella fraktmetoden är tillämplig för den geozon som hör till den adressen. Det avgörs av följande kod.

$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ärefter, om leveransmetoden är tillämplig, förbereder vi de nödvändiga arrayvariablerna enligt konventionerna.

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

Som du kan se använder vi $this->config->get metod för att ladda värdena för konfigurationsvariablerna som "custom_cost", "custom_tax_class_id" och "custom_sort_order". Kom ihåg den första delen, där vi konfigurerade dessa värden med hjälp av det anpassade konfigurationsformuläret!

Ett viktigt utdrag att lägga märke till är också värdet på text knappa in $quote_data array. Den beräknar och formaterar det totala beloppet som kommer att debiteras för vår anpassade fraktmetod. Specifikt kontrollerar den om någon extra skatt ska läggas till "kostnaden" för fraktmetoden. Kom ihåg skatteklassen inställning som vi angav i vårt konfigurationsformulär, där vi valde skattepliktiga varor . Därför kommer det att lägga till en extra skatt på det totala beloppet för fraktmetoden!

Vi har försökt att hålla vår modelldel enkel, men du kan göra alla beräkningar i den här filen enligt dina leveransmetoders API:er om några. Så det är det när det gäller modelldelen.

Demo i front-end

I front-end, lägg till några produkter i kundvagnen och påbörja kassaprocessen. I Steg 4:Leveransmetod , bör du kunna se vår anpassade leveransmetod listad som visas i följande skärmdump.

Den är listad med titeln "Anpassad fraktkostnad - $14,00" . Du kanske blir förvånad över att även om vi konfigurerade kostnaden parameter till 10 , den visar 14 i listan. Som jag nämnde tidigare konfigurerade vi skattepliktiga varor i skatteklassen fältet i konfigurationsformuläret i back-end.

Navigera till Lokalisering> Skatter> Skatteklasser och redigera skattepliktiga varor . Du kommer att se den 20 % moms och en lägenhet 2$ Miljöskatt är konfigurerade för denna skatteklass. Således lägger det till ytterligare $4 till kostnaden för fraktmetoden! Naturligtvis, om du ställer in Skatteklass till Ingen, skatt kommer inte att tillämpas alls!

Så det var allt för idag. Vi har nu framgångsrikt skapat en fullfjädrad anpassad fraktmetodmodul i OpenCart!


  1. Performance Myths:Truncate Cant Be Rolled Back

  2. MySQL Performance Tuning Tips för att optimera databasen

  3. Hur inaktiverar jag referensintegritet i Postgres 8.2?

  4. Hur hämtar jag poster för de senaste 30 minuterna i MS SQL?