Installer et désinstaller les crochets dans OpenCart

En tant que développeur de modules, vous devrez le plus souvent créer un schéma personnalisé dans le développement quotidien de vos modules OpenCart. Il est déjà configuré, comme avec les autres frameworks, sous la forme de différents hooks dans l'architecture de module d'OpenCart..

Avant d’explorer les crochets susmentionnés, explorons le concept d’extensions dans OpenCart. En regardant d'en haut, c'est une extension d'OpenCart qui vous permet d'enrichir les fonctionnalités de base d'OpenCart. En l'installant, vous ajoutez des fonctionnalités au magasin front-end, qu'il s'agisse d'une simple galerie d'images ou de fonctionnalités de glisser-déposer sophistiquées..

En outre, les extensions, en fonction de la fonctionnalité fournie, sont classées en groupes logiques. À titre d’exemple, l’extension de paiement ajoute de nouvelles méthodes de paiement à la caisse, alors qu’il s’agit d’une extension anti-fraude qui vous permet de détecter les activités de spam dans votre magasin. Dirigez-vous vers le back-end et consultez la liste sous le Les extensions menu qui montre les différents types d'extensions supportées dans OpenCart.

Vous serez surpris de savoir qu'un module est aussi juste un autre type d’extension dans OpenCart. Chaque extension est construite autour du flux de travail commun de la façon dont les choses devraient fonctionner dans l'écosystème OpenCart. Et les points d'ancrage vous permettent d'effectuer certaines actions en fonction d'événements spécifiques, qu'il s'agisse d'un point d'installation lors de l'activation du module ou du nettoyage de la mémoire lors de la désinstallation..

Ce sont les points d’installation et de désinstallation qui seront abordés tout au long de cet article. Bien qu'ils soient discutés dans le contexte de modules, je ne vois rien qui puisse vous empêcher d'appliquer la même méthode à d'autres types d'extensions, alors n'hésitez pas à explorer ces fichiers vous-même..

C'est la dernière version d'OpenCart qui fournit les extraits répartis sur ce didacticiel. Au moment d’écrire ceci, c’est la version stable 2.1.0.2.

Traverser le crochet d'installation

Dans cette section, nous allons explorer à quoi sert exactement le crochet d’installation. Allez-y et ouvrez admin / controller / extension / module.php dans votre éditeur de texte préféré, et trouvez le installer méthode. Ça devrait ressembler a quelque chose comme ca:

charge-> langue ('extension / module'); $ this-> document-> setTitle ($ this-> language-> get ('titre_titre')); $ this-> load-> model ('extension / extension'); $ this-> load-> model ('extension / module'); if ($ this-> validate ()) $ this-> model_extension_extension-> install ('module', $ this-> request-> get ['extension']); $ this-> load-> model ('user / user_group'); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'access', 'module /'. $ this-> request-> get ['extension']); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'modify', 'module /'. $ this-> request-> get ['extension']); // Appelez la méthode d'installation si elle existe $ this-> load-> controller ('module /'. $ This-> request-> get ['extension']. '/ Install'); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> redirect ($ this-> url-> link ('extension / module', 'token ='. $ this-> session-> data ['token'], 'SSL'));  $ this-> getList (); …?>

C'est le crochet d'installation générique du module qui sera appelé chaque fois que vous essayez d'installer un module à partir du back-end. Passons en revue les parties importantes de cette méthode.

Premièrement, il charge les fichiers de modèle requis pour les activités suivantes. le $ this-> model_extension_extension-> install appel de méthode s'assure qu'une entrée est ajoutée à la base de données pour ce module particulier.

Suite à cela, il y a quelques trucs ACL, et il est accompli en appelant le addPermission méthode. Il s'assure que l'utilisateur actuel, admin, doit pouvoir accéder aux paramètres spécifiques au module et les modifier..

Enfin, il appelle le installer méthode du module en cours d'installation. Ne vous trompez pas avec la méthode d'installation dans laquelle nous sommes déjà - cela appellera le module spécifique installer méthode si elle existe.

Par exemple, si vous essayez d’installer le Se connecter avec PayPal module, ça va appeler une méthode d'installation définie dans le fichier admin / controller / module / pp_login.php comme indiqué ci-dessous.

load-> model ('extension / event'); $ this-> model_extension_event-> addEvent ('pp_login', 'post.customer.logout', 'module / pp_login / logout'); …?>

Depuis l'introduction d'OpenCart 2.x, quelques fonctionnalités intéressantes ont été incluses, dont event-observateur. Cela vous permet d'ajouter des événements spécifiques à un module, et d'autres modules pourraient configurer des observateurs pour cet événement afin qu'ils puissent exécuter du code arbitraire lorsque cet événement particulier est déclenché. Et c’est exactement ce qui est démontré dans la méthode d’installation ci-dessus, qui ajoute la post.customer.logout événement personnalisé!

Dans le cas du Se connecter avec PayPal module, c’était très simple, mais vous aurez parfois besoin de plus d’informations si vous souhaitez injecter un schéma personnalisé ou quelque chose de similaire. Tirons dans notre méthode d'installation de la PayPal Express Checkout extension de paiement. Allez-y et ouvrez admin / controller / payment / pp_express.php.

load-> model ('payment / pp_express'); $ this-> model_payment_pp_express-> install (); …?>

Tout d’abord, il charge le fichier de modèle correspondant, puis utilise le nom suivant: installer méthode du modèle. En règle générale, chaque fois que vous souhaitez manipuler un schéma, vous devez implémenter ce code dans la méthode d'installation du modèle, plutôt que de le placer directement dans la méthode d'installation du contrôleur..

Maintenant, entrons rapidement dans la méthode d'installation définie dans le fichier de modèle admin / model / payment / pp_express.php.

db-> query ("CREATE TABLE IF NOT EXISTS" ". DB_PREFIX." paypal_order '(' paypal_order_id 'int (11) NOT NULL AUTO_INCREMENT,' order_id 'int (11) NOT NULL,' date_ajoutée 'DATETIME NON NULL,' date_modifiée 'DATETIME NOT NULL,' capture_status 'ENUM (' Complete ',' NotComplete ') DEFAULT NULL,' currency_code 'CHAR (3) NOT NULL,' autorisation_id 'VARCHAR (30) NON NULL,' total 'DECIMAL (10, 2) NOT NULL, PRIMARY KEY ('paypal_order_id')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; "); $ this-> db-> query ("CREATE TABLE IF NOT EXISTS" ". DB_PREFIX." paypal_order_transaction '(' paypal_order_transaction_id 'int (11) NON NULL AUTO_INCREMENT,' paypal_order_id 'int (11) NON NULL,' transaction_ID ', (transaction 20) NOT NULL, 'parent_transaction_id' CHAR (20) NOT NULL, 'date_ajoutée', DATETIME NOT NULL, 'note' VARCHAR (255) NOT NULL, 'msgsubid' CHAR (38) NON NULL, 'receive_id' 'CHAR (20) NON NULL, 'payment_type' ENUM ('none', 'echeck', 'instant', 'refund', 'void') DEFAULT NULL, 'payment_status' CHAR (20) NOT NULL, 'waiting_reason' CHAR, (50) NOT NULL, 'transaction_entity' CHAR (50) NOT NULL, 'montant' DECIMAL (10, 2) NOT NULL, 'debug_data' TEXT NOT NULL, 'call_data' TEXTE NON NULL, PRIMARY KEY ('paypal_order_transaction_id')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; "); …?>

Enfin, il y a de quoi se réjouir! Comme vous pouvez le constater, deux tables MySQL personnalisées sont créées à l’aide de l’API de base de données OpenCart. C'est donc le moyen d'appliquer les modifications liées à la base de données à l'aide de la méthode d'installation du modèle..

Donc, c'est tout ce qui concerne le crochet d'installation. J'espère que ce n'est pas aussi compliqué que cela semble être à première vue. Disons-le de cette façon. Le processus est lancé en déclenchant une méthode d'installation spécifique à une extension qui appelle à son tour la méthode d'installation de l'extension en cours d'installation, si elle existe. Enfin, la méthode d'installation du modèle est appelée à partir de la méthode d'installation du contrôleur dans le cas où une quelconque manipulation de la base de données est nécessaire pour cette extension..

Parcourir le crochet de désinstallation

Cette section, la contrepartie de la section précédente, met en évidence les événements se produisant dans le crochet de désinstallation. Nous allons procéder de la même manière que pour la méthode d’installation de la section précédente, saisissons donc tout de suite le code du désinstaller crochet du fichier admin / controller / extension / module.php.

charge-> langue ('extension / module'); $ this-> document-> setTitle ($ this-> language-> get ('titre_titre')); $ this-> load-> model ('extension / extension'); $ this-> load-> model ('extension / module'); if ($ this-> validate ()) $ this-> model_extension_extension-> uninstall ('module', $ this-> request-> get ['extension']); $ this-> model_extension_module-> deleteModulesByCode ($ this-> request-> get ['extension']); $ this-> load-> model ('setting / setting'); $ this-> model_setting_setting-> deleteSetting ($ this-> request-> get ['extension']); // Appelez la méthode de désinstallation si elle existe $ this-> load-> controller ('module /'. $ This-> request-> get ['extension']. '/ Uninstall'); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> redirect ($ this-> url-> link ('extension / module', 'token ='. $ this-> session-> data ['token'], 'SSL'));  $ this-> getList (); …?>

Encore une fois, cela devrait sembler un peu familier car il s’agit en grande partie du code standard. L’extrait de code important pour commencer est l’appel à la désinstaller méthode qui supprime l’entrée de l’extension en cours de désinstallation à partir du extension Table MySQL.

Ensuite, il appelle deleteModulesByCode, qui supprime les modules associés à l'extension. C'est une méthode spéciale que l'on ne trouve que dans cette module type d'extension-vous ne le trouverez pas dans les autres extensions comme le paiement, l'expédition, la fraude, etc..

La raison en est que vous pouvez répliquer chaque module pour créer plusieurs instances. Par exemple, vous pouvez montrer différents bannière modules sur différentes pages. D'un autre côté, cela n'a aucun sens de reproduire l'autre type d'extensions. Encore une fois à titre d'exemple, il n'y a qu'une seule instance requise pour la Pay Pal extension de paiement dans le front-end.

Ensuite, il supprime les variables de configuration liées au module en appelant le deleteSetting méthode. Enfin, il appelle le désinstaller méthode du module en cours de désinstallation.

Ouvrons admin / controller / module / pp_login.php pour voir à quoi ressemble la méthode de désinstallation.

load-> model ('extension / event'); $ this-> model_extension_event-> deleteEvent ('pp_login'); …?>

Assez simple, hein? Il suffit de défaire les éléments qui ont été injectés dans la méthode d’installation du Se connecter avec PayPal module. Rappelons que nous avons créé un nouvel événement post.customer.logout lors de l'installation, il est donc évident que nous devons le supprimer lors de la désinstallation pour éviter de laisser des ordures spécifiques au module..

Aussi, jetons un coup d’œil à la méthode de désinstallation du PayPal Express Checkout extension de paiement comme nous sommes passés par la méthode d'installation de celle-ci dans la section précédente. Prenez l'extrait suivant de admin / controller / payment / pp_express.php.

load-> model ('payment / pp_express'); $ this-> model_payment_pp_express-> uninstall (); …?>

Assez prévu, stuff-it charge le modèle et appelle la méthode de désinstallation. Cela nous donne également une raison forte pour ouvrir le fichier modèle admin / model / payment / pp_express.php et explorez aussi la méthode de désinstallation.

db-> query ("DROP TABLE IF EXISTS '". DB_PREFIX. "paypal_order_transaction';"); $ this-> db-> query ("DROP TABLE IF EXISTS '". DB_PREFIX. "paypal_order';"); …?>

Nous ne faisons que supprimer les tables MySQL créées plus tôt, car nous ne voulons pas que quelqu'un nous demande: "Comment pouvez-vous quitter cette poubelle?"

Donc, c’est l’histoire, heureusement agréable, d’installation et de désinstallation de hooks dans OpenCart. La prochaine et dernière section résume rapidement les concepts appris jusqu’à présent dans un module personnalisé simple mais fonctionnel, car c’est quelque chose de sympa à avoir dans votre session post-théorie pour chat..

Créer / supprimer un schéma personnalisé à l'aide de crochets d'installation / de désinstallation

Dans cette section, nous allons créer un module d'administrateur démo cela ne fera pas grand chose sauf pour créer un nouveau schéma lors de l'installation et le déposer lors de la désinstallation.

Commençons par créer un fichier de langue de sorte que le module soit repris dans le back-end. Allez-y et créez un fichier admin / langue / anglais / module / demo.php avec le contenu suivant.

Ensuite, nous devons créer un fichier de modèle contenant le code actuel et intéressant de notre module personnalisé. Le fichier modèle doit être placé à admin / model / module / demo.php. Cela crée un démo Table MySQL dans le installer méthode et le laisse tomber dans le désinstaller méthode.

db-> query ("CREATE TABLE IF NOT EXISTS" ". DB_PREFIX." demo '(' demo_id 'int (11) NOT NULL AUTO_INCREMENT,' nom 'VARCHAR (100) NOT NULL, PRIMARY KEY (' demo_id ')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; ");  fonction publique uninstall () $ this-> db-> query ("DROP TABLE IF EXISTS '". DB_PREFIX. "demo';"); 

Enfin, allez-y et créez un fichier de contrôleur admin / controller / module / demo.php avec le contenu suivant.

load-> model ('module / demo'); $ this-> model_module_demo-> install ();  fonction publique uninstall () $ this-> load-> model ('module / demo'); $ this-> model_module_demo-> uninstall (); 

C'est simple, comme il se doit: il charge le modèle et appelle les méthodes correspondantes en fonction des actions effectuées..

Vas-y, essaies. Il devrait être répertorié comme un Module de démonstration sous Extensions> Modules. Installez-le et vous devriez voir le démo Table MySQL créée dans le back-end, et bien sûr n'oubliez pas de la désinstaller pour supprimer la table.

Conclusion

Aujourd'hui, nous avons abordé un aspect important du processus d'installation d'OpenCart, à savoir les points d'ancrage pour l'installation et la désinstallation. Nous avons passé en revue les détails de ces crochets et, dans la dernière partie de l'article, nous avons construit un module simple comme preuve de concept..

Bien sûr, les requêtes et commentaires sont toujours les bienvenus!