Filtrer les méthodes de paiement par poids du panier dans OpenCart

En tant que développeur, vous devrez souvent faire face à un scénario qui vous obligera à modifier le comportement fondamental d'un framework. Si c'est quelque chose qui est déjà fourni par l'interface utilisateur d'administration ou quelque chose de similaire, vous êtes prêt à partir! Mais vous aurez besoin de plus que cela dans le cas de personnalisations complexes - vous devrez modifier le code du framework..

Ce faisant, vous ne voulez pas modifier directement les fichiers de la structure, car cela est considéré comme une mauvaise habitude et cela rend également la mise à niveau de la structure un cauchemar si vous avez apporté beaucoup de modifications dans différents fichiers. Vous devez donc rechercher différentes approches possibles pour y parvenir sans modifier le noyau lui-même. La plupart des frameworks fournissent actuellement une sorte de système qui vous permet de le faire dans le cadre de l'extensibilité.

Nous discuterons aujourd'hui d'un scénario similaire dans le contexte d'OpenCart. Si vous êtes activement impliqué dans le développement d'OpenCart, vous savez probablement que vous pouvez filtrer les méthodes de paiement en fonction du montant minimal du paiement en caisse. Par exemple, vous pouvez choisir de ne pas répertorier la méthode COD si le total de paiement est inférieur à un certain montant. Il est intégré et vous pouvez le configurer lors de la configuration du mode de paiement à partir du back-end..

Dans ce didacticiel, nous allons l'étendre et essayer de limiter les méthodes de paiement en fonction du poids total du panier. Nous verrons comment filtrer la méthode COD lors du paiement si le poids du panier est inférieur à une certaine valeur prédéfinie. Pour obtenir cette fonctionnalité, il faut modifier le code car ce n’est pas quelque chose de configurable à partir du back-end lui-même..

Comme mentionné précédemment, vous ne devez modifier aucun fichier central du framework, ce qui nous laisse l'option OCMOD. Ne vous inquiétez pas si vous ne le connaissez pas, je le présenterai dans la section suivante..

Je suppose que vous utilisez la dernière version d'OpenCart et que, au moment de l'écrire, il s'agit d'OpenCart 2.2.0.0. De plus, le système OCMOD ne fonctionne qu'avec OpenCart 2.x.x.x, ce qui vous donne une autre raison d'installer la dernière version..

Cela nous permet donc d’aller de l’avant. Allons-y!

Qu'est-ce que OCMOD??

OCMOD est un système de recherche et de remplacement basé sur XML qui vous permet de modifier les fichiers principaux du framework OpenCart. Vous définissez le fichier XML selon les conventions d'OCMOD et le reste sera fait. Si vous avez entendu parler du système vQmod dans OpenCart 1.5.x, c'est un successeur de ce système..

Listons quelques exemples pour comprendre ce dont il est capable:

  • Insérer un morceau de code avant une ligne particulière du fichier.
  • Remplacer un bloc de code par votre bloc de code personnalisé.
  • Trouvez une chaîne dans le fichier en utilisant regex et remplacez-la par une autre chaîne.
  • Modifier le schéma de la base de données OpenCart.
  • Beaucoup plus…

Bien que les sections suivantes vous aident à comprendre comment cela fonctionne, vous pouvez également consulter cette explication détaillée d’OCMOD..

Si vous n'êtes pas familier avec vQmod ou OCMOD, je vous recommanderais de lire l'article susmentionné car ce didacticiel évite l'utilisation d'OCMOD..

Après vous être familiarisé avec OCMOD, nous allons passer à la section suivante qui construit un module OCMOD pour réaliser la personnalisation susmentionnée..

A quoi ça ressemble sans OCMOD?

Examinons rapidement le fichier à modifier dans notre cas. Allez-y et ouvrez le catalogue / contrôleur / caisse / payment_method.php fichier dans votre éditeur de texte préféré et recherchez l’extrait suivant dans indice méthode.

$ results = $ this-> model_extension_extension-> getExtensions ('payment');

Il récupère tous les modes de paiement actifs de la base de données. En suivant cette ligne, nous pourrions insérer notre code afin qu’il filtre la méthode COD si le poids total du panier est inférieur à une certaine valeur. Cela devrait ressembler à ceci si nous voulons modifier ce fichier directement.

$ results = $ this-> model_extension_extension-> getExtensions ('payment'); / *** notre code personnalisé *** / $ totalCartWeight = $ this-> cart-> getWeight (); $ minCodWeight = 100; si ($ totalCartWeight < $minCodWeight)  $updated_results = array(); foreach ($results as $result)  if ($result['code'] != 'cod')  $updated_results[] = $result;   $results = $updated_results;  /*** our custom code ***/

Comme vous pouvez le constater, notre code personnalisé est entouré des commentaires..

Tout d'abord, nous allons chercher le poids total du chariot en utilisant le Prendre du poids méthode du Chariot objet. Pour simplifier les choses, nous avons codé en dur le poids minimum requis pour la méthode COD sur 100. Vous pouvez bien sûr créer un module de configuration d’arrière-plan pour pouvoir le configurer depuis le côté administrateur lui-même..

Ensuite, il y a un si condition qui vérifie le poids total du chariot avec le poids minimal de DCO et, partant, filtre la méthode de DCO de la $ résultats tableau.

Donc, c'est tout ce qui concerne la modification du code. Dans la section suivante, nous y parviendrons en utilisant OCMOD, et c'est ce que je vous ai promis au début de l'article.!

Construire et installer le module OCMOD

Construire le module

Créer un filter_payment_method.ocmod.xml fichier avec le contenu suivant.

  Filtrage des méthodes de paiement en fonction du poids du panier Code_Tutsplus_Filter_Payment_Methods 1,0 Code Tutsplus http://code.tutsplus.com   model_extension_extension-> getExtensions ('payment'); ]]> model_extension_extension-> getExtensions ('payment'); / *** notre code personnalisé *** / $ totalCartWeight = $ this-> cart-> getWeight (); $ minCodWeight = 100; si ($ totalCartWeight < $minCodWeight)  $updated_results = array(); foreach ($results as $result)  if ($result['code'] != 'cod')  $updated_results[] = $result;   $results = $updated_results;  /*** our custom code ***/ ]]>   

Comme vous pouvez le constater, la plupart des tags sont explicites. La balise la plus importante est , qui définit le nom du fichier sur lequel l'opération sera effectuée. le balise est utilisée pour rechercher le code que nous recherchons, et enfin nous avons utilisé le balise pour injecter notre code.

Installer le module

Dirigez-vous vers le back-end et accédez à Extensions> Extension Installateur. Clique sur le télécharger bouton et sélectionnez le fichier que nous avons créé dans la section précédente. Si tout se passe bien, vous devriez voir un message de réussite.

Aller vers Extensions> Modifications, et vous devriez voir votre extension OCMOD listée sur cette page.

Vous avez installé l'extension avec succès!

Rendez-vous au début et ajoutez quelques produits au panier afin que le poids total du panier reste inférieur à 100. Lancez maintenant le flux de paiement et Méthodes de payement onglet, vous devriez remarquer qu'il n'y a pas LA MORUE disponible. Bien sûr, vous devez avoir au moins un autre mode de paiement activé, sinon OpenCart se plaindra que Aucune option de paiement disponible.

Alors c'est tout pour aujourd'hui! De cette manière, vous pouvez utiliser le système OCMOD pour toute personnalisation nécessitant de modifier les fichiers principaux..

Conclusion

Dans cet article, nous avons appris à utiliser le système OCMOD pour filtrer les méthodes de paiement lors du paiement en fonction du poids total du panier. J'espère que vous avez apprécié et appris quelque chose de nouveau dans OpenCart.

N'oubliez pas de partager vos pensées et vos requêtes en utilisant le fil de commentaires ci-dessous.