Si vous avez rencontré le développement de modules dans OpenCart, vous avez peut-être été confronté à la situation dans laquelle vous avez déclaré quelques éléments communs dans chaque contrôleur. Ne pensez-vous pas que ce serait bien si vous pouviez déclarer le code commun quelque part et le récupérer au besoin! Donc, dans cet article, nous allons discuter de la manière de configurer un code de contrôleur commun et de l’utiliser dans les modules..
Pour ceux qui sont familiarisés avec le développement de modules dans OpenCart, il est courant de configurer les éléments communs tels que les colonnes d'en-tête, de pied de page et de barre latérale dans la méthode d'index de la classe de contrôleur. Bien qu’il existe différentes manières de centraliser le code commun, nous allons examiner un Façon OpenCart pour y parvenir!
Je suppose que vous utilisez la dernière version d'OpenCart et êtes familiarisé avec le processus de développement de modules, car nous allons nous concentrer davantage sur le concept plutôt que de discuter du code de base..
Allez-y et créez le catalogue / contrôleur / préaction
annuaire. Créer un fichier common.php
sous ce répertoire avec le contenu suivant.
charge-> contrôleur ('common / header'); $ data ['footer'] = $ this-> load-> controller ('commun / footer'); $ data ['preaction_text'] = "J'ai été défini par la méthode 'setup' à partir d'un fichier de contrôleur 'commun'."; $ args ['contrôleur'] -> $ args ['méthode'] ($ data, FALSE);
Assez facile et simple à comprendre! Il n’initialise que quelques variables dans le $ data
tableau, sauf la dernière ligne du installer
méthode. Nous y reviendrons plus tard, car cela révélera le secret de la $ args
tableau.
Avant de créer du code supplémentaire, je vais vous expliquer rapidement le fonctionnement de la distribution dans OpenCart..
Chaque fois que l'utilisateur accède à une adresse URL dans OpenCart, la action l'objet est instancié sur la base de la route variable de chaîne de requête. Voici l'extrait de index.php
.
// Routeur if (isset ($ request-> get ['route']))) $ action = nouvelle action ($ request-> get ['route']); else $ action = new Action ('common / home');
Et ensuite, le envoi
la méthode s'appelle.
$ controller-> dispatch ($ action, nouvelle action ('error / not_found'));
Ça va appeler le envoi
méthode définie dans le fichier situé à système / moteur / front.php
. Dans cette méthode, vous trouverez un extrait qui exécute la boucle while jusqu’à ce que le $ action
valeur définie sur false.
while ($ action) $ action = $ this-> execute ($ action);
Comme vous pouvez le constater, la méthode execute définie dans le même fichier sera appelée jusqu'à ce que $ action
évalue à faux. Cela signifie que si la méthode du contrôleur renvoie un objet d'action, OpenCart exécutera cette action avant de poursuivre. Nous pourrions en tirer parti et appeler l’autre action à partir de l’action elle-même. Voyons comment accomplir cela!
Maintenant, créons un preaction_demo.php
déposer sous le preactiondemo
répertoire avec le contenu suivant.
$ this, 'method' => 'index')); if (file_exists (DIR_TEMPLATE. $ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl')) $ this-> réponse-> setOutput ($ this-> load-> view ($ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl', $ data)); else $ this-> response-> setOutput ($ this-> load-> view ('default / template / preactiondemo / preaction_demo.tpl', $ data));
Si $ flag
est vrai, nous renverrons l'instance de la classe d'action et, comme nous venons de le voir, si le processus de répartition reçoit un objet d'action, il poursuivra cette action. Donc, dans ce cas, il appellera le installer
méthode du commun
manette. Rappeler le common.php
fichier que nous avons créé dans la section précédente.
La chose importante à noter est que nous passons array ('controller' => $ this, 'method' => 'index')
comme argument, qui sera finalement passé au premier argument de la installer
méthode dans le commun
manette. Ça nous aidera à revenir à la indice
méthode du preaction_demo
contrôleur après l'initialisation des variables.
De plus, dans le installer
méthode, nous avons défini quelques variables communes telles que l'en-tête, le pied de page, etc. Et enfin, nous transférons le contrôle au contrôleur d'origine à partir duquel installer
la méthode a été appelée en utilisant l'instruction suivante.
$ args ['contrôleur'] -> $ args ['méthode'] ($ data, FALSE);
Bien sûr, nous devons passer les variables initialisées dans le installer
méthode via $ data
au contrôleur d'origine afin qu'il puisse y être utilisé, ce qui est l'objectif principal de cet article. Il est passé en tant que premier argument de l'appel de méthode ci-dessus. Le deuxième argument est très important car il sera initialisé à la $ flag
variable. Nous faisons délibérément cela pour éviter les boucles infinies.
Enfin, allons de l'avant et configurons notre fichier de vue à catalogue / vue / thème / défaut / modèle / preactiondemo / preaction_demo.tpl
avec le code suivant.
Maintenant que la configuration est terminée, ouvrez l’URL http: //votreopenartstoreurl/index.php? Route = preactiondemo / preaction_demo dans votre navigateur. Vous devriez voir le message "J'ai été défini par la méthode 'setup' à partir du fichier de contrôleur 'commun'." dans cette page!
Ainsi, de cette manière, vous pouvez configurer le code commun à un endroit et appeler cette action depuis les autres contrôleurs. Évidemment, cela évitera la duplication de code et facilitera la modification du code commun aux modules..
Aujourd'hui, vous avez appris un truc cool avec OpenCart: comment appeler une action de l'intérieur de l'action! Bien sûr, il y a d'autres moyens d'y parvenir, mais c'est quelque chose que j'ai en tête ces derniers temps et je pense que je devrais le partager avec vous et obtenir vos commentaires.!