Konfigurer felles kontrollerkode i OpenCart

Hvis du har kommet over modulutvikling i OpenCart, har du kanskje møtt situasjonen der du har erklært et par vanlige elementer i hver kontroller. Tror du ikke at det ville være fint hvis du kunne erklære den vanlige koden et sted, og det ble hentet etter behov! Så i denne artikkelen skal vi diskutere hvordan du konfigurerer felles kontrollerkode og bruker det på tvers av modulene.

For de som er kjent med modulutvikling i OpenCart, er det en rutine å sette opp de vanlige elementene som topptekst, bunntekst og sidebjelke i indeksmetoden til kontrollerklassen. Selv om det finnes forskjellige måter å sentralisere den vanlige koden på, ser vi på en OpenCart måte for å oppnå dette!

Jeg antar at du bruker den nyeste versjonen av OpenCart og er kjent med modulutviklingsprosessen, da vi vil konsentrere mer på konseptet enn å diskutere grunnleggende koden.

Sett opp Common Controller-koden

Gå videre og opprett katalog / styreenhet / preactiondemo katalogen. Lag en fil common.php under den katalogen med følgende innhold.

last> kontroller ( 'common / header'); $ data ['footer'] = $ this-> load-> kontroller ('common / footer'); $ data ['preaction_text'] = "Jeg har blitt angitt av 'setup' metoden fra 'vanlig' kontrollerfil."; $ args ['controller'] -> $ args ['metode'] ($ data, FALSE); 

Ganske lett og grei å forstå! Det initialiserer bare et par variabler i $ data array, bortsett fra den siste linjen i oppsett metode. Vi kommer tilbake til det senere, da det vil avsløre hemmeligheten til $ args matrise.

Forstå distribusjonsprosessen

Før vi lager ytterligere kode, gir jeg deg en rask forklaring på hvordan sendingen fungerer i OpenCart.

Når brukeren får tilgang til en hvilken som helst URL i OpenCart, er det tilsvarende handling objektet er instantiated basert på rute spørrings streng variabel. Her er koden fra index.php.

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

Og etter det, utsendelse Metoden kalles.

$ controller-> send ($ action, new Action ('error / not_found'));

Det vil ringe til utsendelse metode definert i filen som ligger på Systemet / motor / front.php. I den metoden finner du en utdrag som kjører mens løkken går til den blir $ handling verdien er satt til falsk.

mens ($ action) $ action = $ this-> utfør ($ action); 

Som du kan se, kalles det utføringsmetoden som er definert i samme fil til $ handling vurderer til falsk. Dette betyr at hvis fremgangsmåten til kontrolleren returnerer en handling objekt, vil OpenCart utføre denne handlingen før du fortsetter videre. Vi kunne dra nytte av dette og ringe den andre handlingen fra selve handlingen. La oss se hvordan du oppnår det!

Ring til den felles kontrolleren og vis oppsettet

La oss nå lage en preaction_demo.php fil under preactiondemo katalog med følgende innhold.

 $ dette, 'metode' => 'indeks'));  hvis (file_exists (DIR_TEMPLATE. $ this-> config-> få ('config_template'). '/template/preactiondemo/preaction_demo.tpl')) $ this-> response-> setOutput ($ this-> load-> vis ($ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl', $ data));  ellers $ this-> response-> setOutput ($ this-> load-> view ('standard / mal / preactiondemo / preaction_demo.tpl', $ data)); 

Hvis $ flagg er sant, vi returnerer forekomsten av handlingen klassen, og som vi nettopp har sett, hvis forsendelsesprosessen mottar et handlingsobjekt, fortsetter det med den handlingen. Så i dette tilfellet vil det ringe til oppsett metode av felles kontrolleren. Minner om common.php fil som vi opprettet i den tidligere delen.

Det viktige å merke seg er at vi går forbi array ('controller' => $ this, 'method' => 'index') som et argument, som til slutt blir overført til det første argumentet til oppsett metode i felles kontrolleren. Det vil hjelpe oss å komme tilbake til index metode av preaction_demo kontrolleren etter initialisering av variabler.

Videre, i oppsett metode vi har definert noen få vanlige variabler som header, footer osv. Og til slutt overfører vi kontrollen tilbake til den opprinnelige kontrolleren fra hvor oppsett Metoden ble kalt ved å bruke følgende erklæring.

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

Selvfølgelig må vi passere variablene initialisert i oppsett metode via $ data til den originale kontrolleren slik at den kan brukes der, hvilket er hovedformålet med denne artikkelen. Det er bestått som det første argumentet i den ovennevnte metoden. Det andre argumentet er veldig viktig da det blir initialisert til $ flagg variabel. Vi gjør bevisst dette for å unngå uendelig looping.

Til slutt, la oss gå videre og sette opp visningsfilen vår på Katalog / view / tema / default / mal / preactiondemo / preaction_demo.tpl med følgende kode.

 

Nå som vi er ferdig med oppsettet, gå videre og åpne URL http: //youropencartstoreurl/index.php? Route = preactiondemo / preaction_demo i nettleseren din. Du bør se meldingen "Jeg har blitt angitt med" setup "-metoden fra den" vanlige "kontrollerfilen." på den siden!

Så på denne måten kan du sette opp den felles koden på ett sted, og ringe den handlingen fra de andre kontrollerne. Sikkert, det vil unngå kode duplisering, og det er lettere å endre koden som er vanlig på tvers av modulene.

Konklusjon

I dag har du lært et kult triks i OpenCart: hvordan å ringe en handling fra handlingen! Selvfølgelig er det andre måter å oppnå det på, men det er noe jeg har i tankene mine i det siste, og trodde jeg skulle dele det med deg og få tilbakemelding!