Stel Common Controller Code in OpenCart in

Als u moduleontwikkeling tegenkomt in OpenCart, hebt u mogelijk te maken gehad met de situatie waarin u een aantal algemene elementen in elke controller hebt aangegeven. Denk je niet dat het leuk zou zijn als je de gemeenschappelijke code ergens zou kunnen declareren en het wordt opgehaald als dat nodig is! Dus in dit artikel gaan we bespreken hoe gemeenschappelijke controller-code kan worden ingesteld en die over de modules kan worden gebruikt.

Voor degenen die bekend zijn met de ontwikkeling van modules in OpenCart, is het een routine om de algemene elementen zoals de kop-, voettekst- en zijbalkkolommen in te stellen in de indexmethode van de controllerklasse. Hoewel er verschillende manieren zijn om de gemeenschappelijke code te centraliseren, kijken we naar een OpenCart manier om dit te bereiken!

Ik neem aan dat u de nieuwste versie van OpenCart gebruikt en bekend bent met het ontwikkelingsproces van de module, omdat we ons meer op het concept zullen concentreren in plaats van de basiscode te bespreken.

Stel de Common Controller Code in

Ga je gang en maak de catalogus / controller / preactiondemo directory. Maak een bestand common.php onder die map met de volgende inhoud.

load> controller ( 'common / header'); $ data ['footer'] = $ this-> load-> controller ('common / footer'); $ data ['preaction_text'] = "Ik ben ingesteld door de 'setup' methode van 'common' controller file."; $ args ['controller'] -> $ args ['methode'] ($ data, FALSE); 

Vrij eenvoudig en eenvoudig te begrijpen! Het initialiseert gewoon een aantal variabelen in de $ data array, behalve de laatste regel van de opstelling methode. We komen hier later op terug, omdat het het geheim van de $ args rangschikking.

Begrijp het verzendproces

Voordat we een nieuwe code maken, geef ik u een korte uitleg over hoe dispatching werkt in OpenCart.

Telkens wanneer de gebruiker een URL opent in OpenCart, komt de bijbehorende actie object wordt geïnstantieerd op basis van de route query string variabele. Hier is het fragment van index.php.

// Router if (isset ($ request-> get ['route'])) $ action = new Action ($ request-> get ['route']);  else $ action = new Action ('common / home'); 

En daarna, de verzending methode wordt genoemd.

$ controller-> verzending ($ actie, nieuwe actie ('error / not_found'));

Het zal de verzending methode gedefinieerd in het bestand op system / motor / front.php. In die methode vind je een fragment dat de while-lus uitvoert totdat het de $ actie waarde ingesteld op false.

while ($ action) $ action = $ this-> execute ($ action); 

Zoals je kunt zien, zal het de execute-methode die in hetzelfde bestand is gedefinieerd tot en met $ actie evalueert naar false. Dit betekent dat als de methode van de controller een actieobject retourneert, OpenCart die actie uitvoert voordat verder wordt gegaan. We kunnen hiervan profiteren en de andere actie vanuit de actie zelf noemen. Laten we kijken hoe we dat kunnen bereiken!

Roep de Common Controller op en bekijk Setup

Laten we nu een maken preaction_demo.php bestand onder de preactiondemo map met de volgende inhoud.

 $ this, 'method' => 'index'));  if (file_exists (DIR_TEMPLATE. $ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl')) $ this-> response-> 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)); 

Als $ vlag is waar, we zullen het exemplaar van de actieklasse retourneren en, zoals we zojuist hebben gezien, als het verzendingsproces een actieobject ontvangt, gaat het door met die actie. Dus in dit geval zal het de opstelling methode van de gemeenschappelijk controller. Denk aan de common.php bestand dat we in het vorige gedeelte hebben gemaakt.

Het belangrijkste om op te merken is dat we passeren array ('controller' => $ this, 'method' => 'index') als een argument, dat uiteindelijk zal worden doorgegeven aan het eerste argument van de opstelling methode in de gemeenschappelijk controller. Het zal ons helpen terug te keren naar de inhoudsopgave methode van de preaction_demo controller na initialisatie van variabelen.

Verder, in de opstelling methode hebben we een aantal algemene variabelen zoals header, footer, enz. gedefinieerd. En ten slotte, brengen we de controle terug naar de oorspronkelijke controller vanwaar de opstelling methode werd aangeroepen met behulp van de volgende verklaring.

$ args ['controller'] -> $ args ['methode'] ($ data, FALSE);

Natuurlijk moeten we de variabelen geïnitialiseerd in de opstelling methode via $ data naar de originele controller, zodat het daar kan worden gebruikt, wat het hoofddoel van dit artikel is. Het wordt doorgegeven als het eerste argument van de bovenstaande methode aanroep. Het tweede argument is erg belangrijk omdat het wordt geïnitialiseerd naar de $ vlag variabel. We doen dit bewust om oneindige herhalingen te voorkomen.

Laten we tot slot ons view-bestand instellen op catalogus / view / theme / default / template / preactiondemo / preaction_demo.tpl met de volgende code.

 

Nu we klaar zijn met de installatie, ga je gang en open je de URL http: //youropencartstoreurl/index.php? Route = preactiondemo / preaction_demo in je browser. Je zou het bericht moeten zien "Ik ben ingesteld door de 'setup'-methode uit het' gewone 'controllerbestand." op die pagina!

Op deze manier kunt u de gemeenschappelijke code op één plaats instellen en die actie vanaf de andere controllers aanroepen. Het zal zeker codeduplicatie voorkomen en het is eenvoudiger om de code te wijzigen die in alle modules voorkomt.

Conclusie

Vandaag heb je een leuke truc geleerd in OpenCart: hoe een actie te roepen vanuit de actie! Natuurlijk zijn er andere manieren om dat te bereiken, maar het is iets dat ik de laatste tijd in mijn hoofd heb en dacht dat ik het met je zou moeten delen en je feedback zou moeten krijgen!