Mysql
 sql >> Base de données >  >> RDS >> Mysql

Créer une méthode d'expédition personnalisée dans OpenCart :deuxième partie

Dans cette série, nous discutons de la mise en œuvre d'un module de méthode d'expédition personnalisé dans OpenCart. Dans la première partie, nous avons activé et configuré notre méthode d'expédition personnalisée à l'aide du formulaire de configuration dans le back-end. Aujourd'hui, nous allons implémenter les fichiers requis par OpenCart afin qu'il puisse détecter la méthode d'expédition personnalisée et la répertorier avec les autres méthodes d'expédition activées lors du paiement.

J'espère que vous avez créé tous les fichiers de la première partie de cette série. Si vous n'avez pas encore parcouru la première partie, je vous encourage à la parcourir avant d'aller plus loin. De plus, je suppose que vous utilisez la dernière version d'OpenCart.

Un aperçu de la configuration des fichiers dans le frontal

Commençons par une liste des fichiers requis dans le front-end.

  • catalog/language/english/shipping/custom.php :C'est un fichier de langue dans lequel on va définir les labels.
  • catalog/model/shipping/custom.php  :Il s'agit d'un fichier de modèle, ce qui est important car la majeure partie de la logique de calcul des frais de port passe ici.

Donc c'est tout en ce qui concerne la configuration frontale.

Configuration du fichier

Commençons par la configuration du fichier de langue.

Créer un fichier de langue

Créer un fichier catalog/language/english/shipping/custom.php et collez le contenu suivant dans ce fichier.

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

Je ne pense pas que cela nécessite une explication, alors passons à autre chose !

Créer un fichier modèle

Créer un fichier catalog/model/shipping/custom.php et collez le contenu suivant dans ce fichier.

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

Conformément aux conventions OpenCart, le nom de la classe doit être ModelShippingCustom et il y a un getQuote méthode qui est indispensable pour que notre méthode d'expédition soit récupérée par OpenCart.

Vous devriez remarquer que le $address l'argument est passé dans le getQuote méthode, qui est l'adresse de livraison du client lors du paiement, et cela nous permet de décider si la méthode d'expédition actuelle est applicable pour la zone géographique appartenant à cette adresse. C'est décidé par le code suivant.

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

Ensuite, si la méthode d'expédition est applicable, nous préparons les variables de tableau requises conformément aux conventions.

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

Comme vous pouvez le voir, nous utilisons le $this->config->get pour charger les valeurs des variables de configuration telles que "custom_cost", "custom_tax_class_id" et "custom_sort_order". Rappelez-vous la première partie, dans laquelle nous avons configuré ces valeurs à l'aide du formulaire de configuration personnalisé !

En outre, un extrait important à noter est la valeur du text saisissez les $quote_data déployer. Il calcule et formate le montant total qui sera facturé pour notre méthode d'expédition personnalisée. Plus précisément, il vérifie si une taxe supplémentaire doit être ajoutée au "coût" de la méthode d'expédition. Rappeler la classe de taxe paramètre que nous avons fourni dans notre formulaire de configuration, dans lequel nous avons sélectionné Biens imposables . Ainsi, cela ajoutera une taxe supplémentaire au montant total du mode d'expédition !

Nous avons essayé de garder notre partie modèle simple, mais vous pouvez faire tous les calculs dans ce fichier selon vos API de méthode d'expédition, le cas échéant. Voilà donc pour la partie modèle.

Démo dans le front-end

Dans le front-end, ajoutez quelques produits dans le panier et lancez le processus de paiement. Dans Étape 4 :Mode de livraison , vous devriez pouvoir voir notre méthode d'expédition personnalisée répertoriée comme indiqué dans la capture d'écran suivante.

Il est répertorié avec le titre "Tarif d'expédition personnalisé - 14,00 $" . Vous serez peut-être surpris que même si nous avons configuré le Coût paramètre à 10 , il affiche 14 dans la liste. Comme je l'ai mentionné plus tôt, nous avons configuré Marchandises taxables dans la classe fiscale dans le formulaire de configuration dans le back-end.

Accédez à Localisation > Taxes > Classes de taxes , et modifiez Biens imposables . Vous verrez que la TVA de 20 % et un appartement de 2 $ Écotaxe sont configurés pour cette classe de taxe. Ainsi, cela ajoute 4 $ supplémentaires au coût de la méthode d'expédition ! Bien sûr, si vous définissez Classe de taxe à Aucun, la taxe ne sera pas appliquée du tout !

Donc, c'est tout pour aujourd'hui. Nous avons maintenant créé avec succès un module de méthode d'expédition personnalisée à part entière dans OpenCart !