Om du har stött på modulutveckling i OpenCart kan du ha mött den situation där du har förklarat ett par vanliga element i varje kontroller. Tror du inte att det skulle vara trevligt om du kunde deklarera den gemensamma koden någonstans och det hämtas efter behov! Så i den här artikeln kommer vi att diskutera hur man ställer in gemensam kontrollerkod och använder det över modulerna.
För dem som är bekant med modulutveckling i OpenCart, är det en rutin att konfigurera de gemensamma elementen som kolumnrubriker med sidhuvud, sidfot och sidobar i indexmetoden för kontrollerklassen. Även om det finns olika sätt att centralisera den gemensamma koden ser vi på en OpenCart sätt för att uppnå detta!
Jag antar att du använder den senaste versionen av OpenCart och är bekant med modulutvecklingsprocessen, eftersom vi kommer att koncentrera mer på konceptet än att diskutera grundläggande kod.
Gå vidare och skapa katalog / styrenheten / preactiondemo
katalogen. Skapa en fil common.php
under den katalogen med följande innehåll.
last> styrenhet ( 'gemensamma / header'); $ data ['footer'] = $ this-> load-> controller ('common / footer'); $ data ['preaction_text'] = "Jag har ställts in med" setup "-metoden från" vanlig "kontrollerfil."; $ args ['controller'] -> $ args ['metod'] ($ data, FALSE);
Lätt lätt och lätt att förstå! Det initierar bara ett par variabler i $ uppgifter
array, förutom den sista raden av inrätta
metod. Vi kommer tillbaka till det senare, eftersom det kommer att avslöja hemligheten hos $ args
array.
Innan vi skapar ytterligare koden, ger jag dig en snabb förklaring om hur sändning fungerar i OpenCart.
När användaren åtkomst till någon URL i OpenCart, motsvarar den verkan objektet är instantierat baserat på rutt variabel för frågesträng. Här är snippet från index.php
.
// Router om (isset ($ request-> få ['route'])) $ action = new Action ($ request-> få ['route']); else $ action = new Action ("common / home");
Och efter det, avsändande
Metoden heter.
$ controller-> avsändning ($ action, new Action ('error / not_found'));
Det ringer till avsändande
metod definierad i filen som finns på system / motor / front.php
. På den här metoden hittar du ett fragment som kör samtidigt slingan tills det blir $ action
värdet satt till false.
medan ($ action) $ action = $ this-> execute ($ action);
Som du kan se, kommer det att ringa exekveringsmetoden som definierats i samma fil tills $ action
utvärderar till falskt. Detta innebär att om Metod för kontrollenheten returnerar ett åtgärdsobjekt, kommer OpenCart att utföra den åtgärden innan du fortsätter vidare. Vi kan dra nytta av detta och kalla den andra åtgärden från själva åtgärden. Låt oss se hur vi åstadkommer det!
Nu, låt oss skapa en preaction_demo.php
fil under preactiondemo
katalog med följande innehåll.
$ this, 'method' => 'index')); if (file_exists (DIR_TEMPLATE. $ this-> config-> få ('config_template'). '/template/preactiondemo/preaction_demo.tpl')) $ this-> response-> setOutput ($ this-> load-> visa ($ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl', $ data)); annars $ this-> response-> setOutput ($ this-> load-> view ('standard / mall / preactiondemo / preaction_demo.tpl', $ data));
Om $ flagga
Det är sant att vi returnerar förekomsten av actionklassen, och som vi just har sett, om avsändningsprocessen tar emot ett åtgärdsobjekt fortsätter det med den åtgärden. Så i det här fallet kommer det att ringa inrätta
metod för allmänning
kontrollant. Återkalla common.php
fil som vi skapade i det tidigare avsnittet.
Det viktiga att notera är att vi passerar array ('controller' => $ this, 'method' => 'index')
som ett argument, som till slut kommer att överföras till det första argumentet från inrätta
metod i allmänning
kontrollant. Det hjälper oss att komma tillbaka till index
metod för preaction_demo
styrenhet efter initialisering av variabler.
Vidare, i inrätta
metod vi har definierat några vanliga variabler som rubrik, sidfot etc. Till sist överför vi kontrollen till den ursprungliga kontrollenheten från var inrätta
Metoden kallades med följande uttalande.
$ args ['controller'] -> $ args ['metod'] ($ data, FALSE);
Naturligtvis måste vi överföra de variabler som initialiserats i inrätta
metod via $ uppgifter
till den ursprungliga kontrollen så att den kan användas där, vilket är huvudsyftet med denna artikel. Det passeras som det första argumentet i ovanstående metodsamtal. Det andra argumentet är mycket viktigt eftersom det kommer att initieras till $ flagga
variabel. Vi gör medvetet detta för att undvika oändlig looping.
Till sist, låt oss gå vidare och ställa in vår visningsfil på Katalog / view / tema / default / mall / preactiondemo / preaction_demo.tpl
med följande kod.
Nu när vi är färdiga med installationen, fortsätt och öppna URL http: //youropencartstoreurl/index.php? Route = preactiondemo / preaction_demo i din webbläsare. Du borde se meddelandet "Jag har ställts in med" setup "-metoden från den" vanliga "kontrollen filen." på den sidan!
Så på så sätt kan du ställa in den gemensamma koden på ett ställe och ringa den åtgärden från de andra kontrollerna. Visst kommer det att undvikas koddubbling, och det är lättare att ändra koden som är gemensam över modulerna.
Idag har du lärt dig ett coolt trick i OpenCart: hur man ringer en handling från insidan! Självklart finns det andra sätt att uppnå det, men det är någonting jag har i mitt sinne nyligen och trodde att jag skulle dela den med dig och få din feedback!