Configurer un code de contrôleur commun dans OpenCart

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..

Configurer le code de contrôleur commun

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.

Comprendre le processus d'expédition

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!

Appelez le Common Controller et Setup View

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..

Conclusion

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.!