sql >> Database teknologi >  >> RDS >> Mysql

Opret en brugerdefineret forsendelsesmetode i OpenCart:Anden del

I denne serie diskuterer vi implementeringen af ​​et tilpasset forsendelsesmetodemodul i OpenCart. I den første del aktiverede og konfigurerede vi vores tilpassede forsendelsesmetode ved hjælp af konfigurationsformularen i back-end. I dag implementerer vi de filer, som kræves af OpenCart, så den kan registrere den tilpassede forsendelsesmetode og liste den sammen med de andre aktiverede forsendelsesmetoder under kassen.

Jeg håber, at du har oprettet alle filerne fra den første del af denne serie. Hvis du ikke har gennemgået den første del endnu, vil jeg opfordre dig til at gennemgå det, før du går videre. Jeg antager også, at du bruger den seneste version af OpenCart.

Et blik på filopsætningen i frontenden

Lad os starte med en liste over de nødvendige filer i front-end.

  • catalog/language/english/shipping/custom.php :Det er en sprogfil, hvori vi definerer etiketterne.
  • catalog/model/shipping/custom.php :Det er en modelfil, hvilket er vigtigt, da det meste af forsendelsesberegningslogikken går her.

Så det er det, hvad front-end-opsætningen angår.

Filopsætning

Lad os starte med opsætningen af ​​sprogfilen.

Opret en sprogfil

Opret en fil catalog/language/english/shipping/custom.php og indsæt følgende indhold i den fil.

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

Jeg tror ikke, det kræver nogen forklaring, så lad os komme videre!

Opret en modelfil

Opret en fil catalog/model/shipping/custom.php og indsæt følgende indhold i den fil.

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

I henhold til OpenCart-konventionerne skal klassenavnet være ModelShippingCustom og der er en getQuote metode som er et must for at vores forsendelsesmetode kan afhentes af OpenCart.

Du bør bemærke, at $address argumentet sendes i getQuote metode, som er kundens forsendelsesadresse under kassen, og den giver os mulighed for at beslutte, om den aktuelle forsendelsesmetode er anvendelig for den geografiske zone, der hører til denne adresse. Det afgøres af følgende kode.

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

Dernæst, hvis forsendelsesmetoden er anvendelig, forbereder vi de påkrævede matrixvariabler i henhold til konventionerne.

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, bruger vi $this->config->get metode til at indlæse værdierne for konfigurationsvariablerne som "custom_cost", "custom_tax_class_id" og "custom_sort_order". Husk den første del, hvor vi konfigurerede disse værdier ved hjælp af den brugerdefinerede konfigurationsformular!

Et vigtigt uddrag at bemærke er også værdien af text indtast $quote_data array. Den beregner og formaterer det samlede beløb, som vil blive opkrævet for vores tilpassede forsendelsesmetode. Specifikt tjekker den, om der skal lægges yderligere afgift til "omkostningerne" for forsendelsesmetoden. Husk skatteklassen indstilling, vi angav i vores konfigurationsformular, hvor vi valgte afgiftspligtige varer . Det vil således tilføje en ekstra afgift til det samlede beløb for forsendelsesmetoden!

Vi har forsøgt at holde vores modeldel enkel, men du kan udføre alle beregningerne i denne fil i henhold til dine forsendelsesmetode-API'er, hvis nogen. Så det er det, hvad angår modeldelen.

Demo i front-end

I front-end skal du tilføje et par produkter i indkøbskurven og starte betalingsprocessen. I Trin 4:Leveringsmetode , bør du være i stand til at se vores brugerdefinerede forsendelsesmetode angivet som vist på det følgende skærmbillede.

Det er opført med titlen "Tilpasset forsendelsespris - $14,00" . Du kan blive overrasket over, at selvom vi har konfigureret omkostningerne parameter til 10 , den viser 14 på listen. Som jeg nævnte tidligere, konfigurerede vi afgiftspligtige varer i Skatteklassen felt i konfigurationsformularen i back-end.

Naviger til Lokalisering> Skatter> Skatteklasser , og rediger afgiftspligtige varer . Du vil se den 20 % moms og en flad 2$ Økoafgift er konfigureret til denne skatteklasse. Således tilføjer det yderligere $4 til prisen på forsendelsesmetoden! Selvfølgelig, hvis du angiver Skatteklasse til Ingen, skat pålægges slet ikke!

Så det var det for i dag. Vi har nu med succes oprettet et fuldt udbygget tilpasset forsendelsesmetodemodul i OpenCart!


  1. Brug af MySQL relationelle databaser på Fedora 20

  2. ASP.NET bruge SqlConnection connect MySQL

  3. Korrekt værktøj får tuning til at fungere hurtigt

  4. Hvordan pivoterer man ukendt antal kolonner og ingen aggregater i SQL Server?