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