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

Crea un metodo di spedizione personalizzato in OpenCart:seconda parte

In questa serie, stiamo discutendo l'implementazione di un modulo del metodo di spedizione personalizzato in OpenCart. Nella prima parte, abbiamo abilitato e configurato il nostro metodo di spedizione personalizzato utilizzando il modulo di configurazione nel back-end. Oggi implementeremo i file richiesti da OpenCart in modo che possa rilevare il metodo di spedizione personalizzato e elencarlo insieme agli altri metodi di spedizione abilitati durante il checkout.

Spero che tu abbia creato tutti i file dalla prima parte di questa serie. Se non hai ancora affrontato la prima parte, ti incoraggio a passarci attraverso prima di procedere oltre. Inoltre, presumo che tu stia utilizzando l'ultima versione di OpenCart.

Uno sguardo all'impostazione del file nel front-end

Iniziamo con un elenco dei file richiesti nel front-end.

  • catalog/language/english/shipping/custom.php :È un file di lingua in cui definiremo le etichette.
  • catalog/model/shipping/custom.php :È un file modello, importante poiché la maggior parte della logica di calcolo della spedizione va qui.

Quindi è tutto per quanto riguarda la configurazione del front-end.

Impostazione file

Iniziamo con la configurazione del file della lingua.

Crea un file di lingua

Crea un file catalog/language/english/shipping/custom.php e incolla il seguente contenuto in quel file.

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

Non credo che richieda alcuna spiegazione, quindi andiamo avanti!

Crea un file modello

Crea un file catalog/model/shipping/custom.php e incolla il seguente contenuto in quel file.

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

Secondo le convenzioni OpenCart, il nome della classe dovrebbe essere ModelShippingCustom e c'è un getQuote metodo che è un must per il nostro metodo di spedizione per essere ritirato da OpenCart.

Dovresti notare che il $address argomento viene passato in getQuote metodo, che è l'indirizzo di spedizione del cliente in fase di checkout, e ci consente di decidere se il metodo di spedizione corrente è applicabile per la zona geografica appartenente a tale indirizzo. È deciso dal codice seguente.

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

Successivamente, se il metodo di spedizione è applicabile, prepariamo le variabili array richieste secondo le convenzioni.

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

Come puoi vedere, stiamo usando il $this->config->get metodo per caricare i valori per le variabili di configurazione come "custom_cost", "custom_tax_class_id" e "custom_sort_order". Ricordiamo la prima parte, in cui abbiamo configurato questi valori utilizzando il modulo di configurazione personalizzato!

Inoltre, uno snippet importante da notare è il valore del text digita il $quote_data Vettore. Calcola e formatta l'importo totale che verrà addebitato per il nostro metodo di spedizione personalizzato. Nello specifico, verifica se al “costo” della modalità di spedizione debbano essere aggiunte eventuali tasse aggiuntive. Richiama la Classe fiscale impostazione che abbiamo fornito nel nostro modulo di configurazione, in cui abbiamo selezionato Beni imponibili . Pertanto, verrà aggiunta una tassa aggiuntiva all'importo totale del metodo di spedizione!

Abbiamo cercato di mantenere semplice la nostra parte del modello, ma puoi eseguire tutti i calcoli in questo file secondo le API del tuo metodo di spedizione, se presenti. Quindi è tutto per quanto riguarda la parte del modello.

Demo nel front-end

Nel front-end, aggiungi alcuni prodotti nel carrello e avvia la procedura di pagamento. Nel Passaggio 4:Metodo di consegna , dovresti essere in grado di vedere il nostro metodo di spedizione personalizzato elencato come mostrato nello screenshot seguente.

È elencato con il titolo "Tariffa di spedizione personalizzata - $ 14,00" . Potresti essere sorpreso dal fatto che, sebbene abbiamo configurato il Costo parametro su 10 , mostra 14 nella lista. Come accennato in precedenza, abbiamo configurato beni imponibili nella Classe fiscale campo nel modulo di configurazione nel back-end.

Vai a Localizzazione> Tasse> Classi fiscali e modifica Beni imponibili . Vedrai che 20% di IVA e un appartamento 2$ Imposta ecologica sono configurati per questa classe fiscale. Quindi, aggiunge altri $ 4 al costo del metodo di spedizione! Naturalmente, se imposti Classe fiscale a Nessuno l'imposta non verrà applicata affatto!

Quindi, per oggi è tutto. Ora abbiamo creato con successo un modulo di metodo di spedizione personalizzato completo in OpenCart!