Contrôleurs personnalisés dans OpenCart 2

Aujourd'hui, nous allons passer en revue le concept de contrôleur dans OpenCart 2.x. Avec la sortie de la version OpenCart 2.x, ils ont introduit des modifications de la structure qui nécessitent une mise à niveau si vous avez créé des modules personnalisés dans la version antérieure, OpenCart 1.x. Nous allons passer en revue un exemple pratique de ce que nous appellerons Guestbook dans ce tutoriel..

Avant de poursuivre dans cet article, vous pouvez considérer cela comme un suivi de ce que j'ai écrit précédemment. Dans cet article, j'ai expliqué comment créer une page personnalisée dans OpenCart 1.x, et si vous avez déjà suivi cet article, vous pouvez passer rapidement à travers la plupart des sections d'aujourd'hui.! 

Bien sûr, c'est OpenCart 2.x qui sera discuté aujourd'hui, alors assurez-vous de suivre le code de près.

Si vous souhaitez avoir plus de théorie sur le modèle de structure OpenCart et les contrôleurs, vous pouvez passer en revue quelques sections initiales de cet article. Cela dit, rien ne vous empêche de suivre cet article tout de suite, car je ne passerai pas à l'essentiel..

Pourquoi un contrôleur personnalisé?

Quelque chose que vous demandez peut-être en premier lieu: pourquoi un contrôleur personnalisé? Voyons rapidement ce qu’est le contrôleur dans OpenCart avant d’entrer dans cette partie..

Dans le contexte d’OpenCart, le manette est un composant indispensable du framework qui gère directement le processus de routage et rend l'interface utilisateur. Dans le processus, il traite d'autres composants importants comme le langage, le modèle et la vue pour construire le résultat final.

Lorsque vous accédez à une page dans OpenCart, la structure OpenCart recherche le contrôleur correspondant et lui délègue le traitement. Par nature modulaire, le cadre OpenCart fournit plusieurs contrôleurs qui traitent des fonctionnalités groupées de manière logique..

Par exemple, le Compte Le groupe contient des contrôleurs traitant de la connexion, de l'enregistrement, du profil et de cas d'utilisation similaires. De même, le check-out groupe de contrôleurs gère le processus de création de commande.

En résumé, lorsque vous souhaitez créer une fonctionnalité qui ne fait pas partie du cœur d’OpenCart et si elle prend une nouvelle URL, une route dans la terminologie d’OpenCart, vous devez choisir un contrôleur personnalisé. Il vous donne un contrôle complet sur le processus de création de page, quels éléments vous souhaitez afficher sur votre page personnalisée.

Créer un contrôleur personnalisé

Aujourd'hui, nous allons implémenter une fonctionnalité de base de livre d'or qui illustre le concept de contrôleurs personnalisés. Pour ce faire, nous allons construire une interface dans le système frontal qui permet aux utilisateurs invités de soumettre leurs commentaires en entrant leur nom et leur message..

Avant de continuer, assurez-vous que votre installation d’OpenCart 2.3.x fonctionne correctement. Et c'est à peu près tout pour commencer à travailler sur notre fonction Livre d'or.

Pour ceux qui ne sont pas familiers avec la structure OpenCart, il est préférable de rechercher les contrôleurs frontaux. catalogue / contrôleur. C'est l'annuaire qui gère tous les contrôleurs par groupe, en fonction des fonctionnalités qu'ils fournissent.

Dans notre cas, nous allons créer un groupe séparé appelé livre d'or. Allez-y et créez un répertoire catalogue / contrôleur / livre d'or. Dans ce répertoire, créez un entry.php fichier avec le contenu suivant. C'est un fichier de contrôleur qui gère la logique d'application et la logique de soumission de notre fonctionnalité Livre d'or.

charge-> langue ('livre d'or / livre d'or'); $ this-> document-> setTitle ($ this-> language-> get ('titre_titre')); if (($ this-> request-> server ['REQUEST_METHOD'] == 'POST') && $ this-> validate ()) $ this-> load-> model ('livre d'or / livre d'or'); $ data ['subject'] = sprintf ('Nouvelle entrée de livre d'or soumise par% s', $ this-> request-> post ['guest_name']); $ data ['message'] = $ this-> request-> post ['guest_message']; $ this-> model_guestbook_guestbook-> processGuestbookEntry ($ data); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> redirect ($ this-> url-> link ('livre d'or / entrée', ", true)); $ data ['success'] ="; if (isset ($ this-> session-> data ['succès']))) $ data ['success'] = $ this-> session-> data ['succès']; unset ($ this-> session-> data ['success']);  $ data ['breadcrumbs'] = array (); $ data ['breadcrumbs'] [] = array ('text' => $ this-> language-> get ('text_home'), 'href' => $ this-> url-> link ('common / home' )); $ data ['breadcrumbs'] [] = array ('text' => $ this-> language-> get ('titre_titre'), 'href' => $ this-> url-> link ('livre d'or / entrée' , ", true)); $ data ['heading_title'] = $ this-> language-> get ('titre_title'); $ data ['entry_guest_name'] = $ this-> language-> get ('entry_guest_name') ; $ data ['entry_guest_message'] = $ this-> language-> get ('entry_guest_message'); $ data ['entry_submit'] = $ this-> language-> get ('entry_submit'); if this-> error ['guest_name'])) $ data ['error_guest_name'] = $ this-> error ['guest_name']; else $ data ['error_guest_name'] = ";  if (isset ($ this-> error ['guest_message']))) $ data ['error_guest_message'] = $ this-> error ['guest_message'];  else $ data ['error_guest_message'] = "; $ data ['action'] = $ this-> url-> link ('livre d'or / entrée',", true); if (isset ($ this-> request-> post ['guest_name'])) $ data ['guest_name'] = $ this-> request-> post ['guest_name'];  else $ data ['guest_name'] = "; if (isset ($ this-> request-> post ['guest_message'])) $ data ['guest_message'] = $ this-> request-> post ['guest_message']; else $ data ['guest_message'] = ";  $ data ['column_left'] = $ this-> load-> controller ('common / column_left'); $ data ['column_right'] = $ this-> load-> controller ('common / column_right'); $ data ['content_top'] = $ this-> load-> controller ('common / content_top'); $ data ['content_bottom'] = $ this-> load-> controller ('common / content_bottom'); $ data ['footer'] = $ this-> load-> controller ('commun / footer'); $ data ['header'] = $ this-> load-> controller ('common / header'); $ this-> response-> setOutput ($ this-> load-> view ('livre d'or / entrée', $ data));  fonction protégée validate () if (utf8_strlen (trim ($ this-> request-> post ['nom_ invité']]))) < 1)  $this->error ['guest_name'] = $ this-> language-> get ('error_guest_name');  if (utf8_strlen (trim ($ this-> request-> post ['guest_message'])))) < 1)  $this->error ['guest_message'] = $ this-> language-> get ('error_guest_message');  return! $ this-> error;  

Selon les conventions de dénomination OpenCart, le nom de la classe commence par le Manette mot-clé suivi du nom du répertoire, Livre d'or dans notre cas, dans lequel réside le fichier de classe. En outre, le nom du fichier de classe, Entrée dans notre cas, est ajouté à la fin.

Chaque classe de contrôleur fournit de facto indice méthode qui gère la plupart de la logique du contrôleur. Ensuite, nous allons parcourir le code dans le indice méthode, et nous allons également créer d'autres fichiers au besoin.

La plupart du temps, nous commencerons par inclure le fichier de langue du groupe spécifique. C'est la façon dont OpenCart gère les étiquettes de langue statiques dans toute l'application. Bien sûr, cela facilite la mise en œuvre de sites multilingues.

$ this-> load-> language ('livre d'or / livre d'or');

Avant de poursuivre, créons le fichier de langue correspondant afin que notre contrôleur puisse le trouver. Créer un catalogue / langue / fr-fr / livre d'or / livre d'or.php fichier avec le contenu suivant.

Comme vous pouvez le constater, nous ne faisons qu'attribuer des étiquettes à leurs valeurs dans le tableau de langues.

Retour à notre contrôleur, la prochaine chose à faire est de configurer la balise de titre HTML pour notre page.

$ this-> document-> setTitle ($ this-> language-> get ('titre_titre'));

Les utilisateurs aux yeux perçants auront remarqué que nous avons utilisé le titre_titre Variable de langue définie dans le fichier de langue créé il y a un instant.

Afin de comprendre le code suivant, nous devons créer un fichier de modèle. Donc, pendant un moment, je vous demande de créer le fichier de modèle à catalogue / modèle / livre d'or / livre d'or.php avec le contenu suivant.

protocole = $ this-> config-> get ('config_mail_protocol'); $ mail-> paramètre = $ this-> config-> get ('config_mail_parameter'); $ mail-> smtp_hostname = $ this-> config-> get ('config_mail_smtp_hostname'); $ mail-> smtp_username = $ this-> config-> get ('config_mail_smtp_username'); $ mail-> smtp_password = html_entity_decode ($ this-> config-> get ('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $ mail-> smtp_port = $ this-> config-> get ('config_mail_smtp_port'); $ mail-> smtp_timeout = $ this-> config-> get ('config_mail_smtp_timeout'); $ mail-> setTo ($ this-> config-> get ('config_email')); $ mail-> setFrom ($ this-> config-> get ('config_email')); $ mail-> setSender (html_entity_decode ($ this-> config-> get ('nom_config' '), ENT_QUOTES,' UTF-8 ')); $ mail-> setSubject ($ data ['subject']); $ mail-> setText ($ data ['message']); $ mail-> send ();  

Dans OpenCart, le modèle est responsable de la gestion de la logique applicative de l'application. Si vous souhaitez implémenter une logique impliquant une base de données, c'est l'endroit où elle devrait aller.

La convention de dénomination de la classe de modèle est similaire à celle de la classe de contrôleur. Pour garder les choses simples, nous avons mis en place une méthode processGuestbookEntry qui avertit l'administrateur du magasin par courrier électronique lorsqu'un utilisateur soumet une entrée de livre d'or. Assez simple, hein?

Revenons à notre contrôleur et examinons le prochain morceau de code dans la file d'attente..

if (($ this-> request-> server ['REQUEST_METHOD'] == 'POST') && $ this-> validate ()) $ this-> load-> model ('livre d'or / livre d'or'); $ data ['subject'] = sprintf ('Nouvelle entrée de livre d'or soumise par% s', $ this-> request-> post ['nom_ invité']); $ data ['message'] = $ this-> request-> post ['guest_message']; $ this-> model_guestbook_guestbook-> processGuestbookEntry ($ data); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> redirect ($ this-> url-> link ('livre d'or / entrée', ", true));

Il vérifie la validité POSTER demande et effectue la validation de base des données soumises par l'utilisateur en appelant le valider méthode.

Le code $ this-> load-> model ('livre d'or / livre d'or') est utilisé pour charger le modèle que nous avons défini il y a un instant. Immédiatement après, nous préparons le $ data tableau basé sur l'entrée de l'utilisateur et appelez le processGuestbookEntry méthode, qui informe l’administrateur de la boutique de l’entrée du livre d’or. Enfin, nous redirigeons l'utilisateur vers la page d'entrée du livre d'or.

À l’avenir dans le contrôleur, l’extrait suivant définit le message de réussite qui sera affiché lors de la soumission du formulaire..

$ data ['success'] = "; if (isset ($ this-> session-> data ['success'])) $ data ['success'] = $ this-> session-> data ['success' ]; unset ($ this-> session-> data ['success']);

Ensuite, un extrait de code est utilisé pour créer des liens de fil d'Ariane pour la page..

$ data ['breadcrumbs'] = array (); $ data ['breadcrumbs'] [] = array ('text' => $ this-> language-> get ('text_home'), 'href' => $ this-> url-> link ('common / home' )); $ data ['breadcrumbs'] [] = array ('text' => $ this-> language-> get ('titre_titre'), 'href' => $ this-> url-> link ('livre d'or / entrée' ,", vrai) );

Le prochain extrait est un élément important que vous utiliserez la plupart du temps pour transmettre des informations de la méthode du contrôleur au modèle de vue..

$ data ['heading_title'] = $ this-> language-> get ('heading_title'); $ data ['entry_guest_name'] = $ this-> language-> get ('entry_guest_name'); $ data ['entry_guest_message'] = $ this-> language-> get ('entry_guest_message'); $ data ['entry_submit'] = $ this-> language-> get ('entry_submit');

Semblable à l’affectation de variables, OpenCart initialise les éléments communs de l’en-tête de page, du pied de page et des éléments similaires, comme décrit dans l’extrait de code suivant..

$ data ['column_left'] = $ this-> load-> controller ('common / column_left'); $ data ['column_right'] = $ this-> load-> controller ('common / column_right'); $ data ['content_top'] = $ this-> load-> controller ('common / content_top'); $ data ['content_bottom'] = $ this-> load-> controller ('common / content_bottom'); $ data ['footer'] = $ this-> load-> controller ('commun / footer'); $ data ['header'] = $ this-> load-> controller ('common / header');

Enfin, il appelle le modèle de vue pour rendre la page réelle!

$ this-> response-> setOutput ($ this-> load-> view ('livre d'or / entrée', $ data));

Bien sûr, nous n’avons pas encore construit de gabarit de vue. C'est le moment idéal pour faire ça! Allez-y et créez un catalogue / vue / thème / défaut / modèle / livre d'or / entrée.tpl fichier avec le contenu suivant.

 
  • ">

Il s’agit du fichier principal de gabarit de vue chargé d’afficher le contenu de notre page Guestbook. Dans ce fichier, nous venons d'utiliser les variables configurées dans le contrôleur. indice méthode.

Il est important de noter que la réactivité est intégrée aux dernières versions d'OpenCart prises en charge par le framework Bootstrap. En dehors de cela, c'est du HTML assez simple et assez facile à comprendre.

Donc, c'est tout ce qui concerne l'installation du fichier.

Nous avons tout en place maintenant, mais comment y accéderiez-vous dès le départ??

En mode frontal, vous pouvez accéder à la page Guestbook en ajoutant la variable route querystring. L'URL doit donc ressembler à http: //votre-opencart-store-url/index.php? Route = guestbook / entry.

Voyons comment OpenCart mappe n'importe quelle URL vers le fichier de contrôleur spécifique. Le format de la variable de route est répertoire / nom du fichier / nom de la méthode.

  • le annuaire cartographie des composants dans le répertoire sous catalogue / contrôleur.
  • le nom de fichier correspond au nom du fichier de contrôleur sous catalogue / contrôleur / répertoire.
  • Enfin, il va chercher la méthode du contrôleur nommée nom de la méthode si elle est spécifiée dans la route, sinon, la valeur par défaut sera appelée indice méthode.

Voici à quoi ressemble le résultat final.

Bien sûr, vous pouvez le tester en soumettant le formulaire et recevoir une notification par courrier électronique à l'adresse électronique enregistrée en tant qu'administrateur du magasin..

Conclusion

Quel que soit le cadre, il est toujours excitant d’avancer et d’implémenter vos propres fonctionnalités personnalisées. C'était exactement le sujet du tutoriel d'aujourd'hui, dans lequel nous avons étendu OpenCart et développé des contrôleurs personnalisés en construisant une fonctionnalité à la fois simple et utile de Guestbook..

Au cours du processus, nous avons réalisé qu'il ne s'agissait pas uniquement des contrôleurs: il y avait peu d'autres éléments clés qui étaient inévitables. Nous avons donc fini par les présenter: Model, Language et View..

À la fin, c’était agréable de voir le cas pratique de ce que j’avais promis au début de l’article. Donc, c'est tout pour aujourd'hui et n'hésitez pas à laisser vos questions et commentaires. De plus, j'aimerais avoir de vos nouvelles s'il y a un sujet en particulier que vous voudriez que je mentionne dans mon prochain article.!

Comme toujours, si vous recherchez des outils, utilitaires, extensions, etc., OpenCart supplémentaires que vous pouvez exploiter dans vos propres projets ou pour votre propre éducation, n'oubliez pas de voir ce que nous avons sur le marché..

Si vous avez apprécié cet article, j'en ai quelques autres au cas où vous voudriez les parcourir!