Ställ in Common Controller-kod i OpenCart

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.

Ställ in Common Controller-koden

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.

Förstå leveransprocessen

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!

Ring till Common Controller och View Setup

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.

Slutsats

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!