Dacă ați întâlnit dezvoltarea modulelor în OpenCart, s-ar putea să fi întâmpinat situația în care ați declarat câteva elemente comune în fiecare controler. Nu credeți că ar fi bine dacă ați putea declara undeva codul comun și este luat după cum este necesar! Deci, în acest articol, vom discuta cum să configurați codul comun de controler și să îl utilizați pe module.
Pentru cei care sunt familiarizați cu dezvoltarea modulelor în OpenCart, este o rutină de a configura elementele comune, cum ar fi antetul, subsolul și coloanele laterale în metoda index a clasei de controler. Deși există modalități diferite de a centraliza codul comun, vom analiza un Modul OpenCart pentru a realiza acest lucru!
Presupun că utilizați cea mai recentă versiune a OpenCart și sunteți familiarizați cu procesul de dezvoltare a modulului, deoarece ne vom concentra mai mult pe concept decât pe discutarea codului de bază.
Continuați și creați Catalog / controler / preactiondemo
director. Creați un fișier common.php
sub acel director cu următorul conținut.
a sarcinii> controler ( 'comună / header'); $ data ['footer'] = $ acest-> încărcător-> controler ("common / footer"); $ data ['preaction_text'] = "Am fost setat de metoda" setup "din fișierul de controler" comun "."; $ args ['controller'] -> $ args ['metoda'] ($ date, FALSE);
Destul de ușor și direct de înțeles! Pur și simplu inițializează câteva variabile în $ date
array, cu excepția ultimei linii a înființat
metodă. Vom reveni la asta mai târziu, deoarece va dezvălui secretul $ args
mulțime.
Înainte de a crea orice cod suplimentar, vă voi da o explicație rapidă a modului în care dispeceratul funcționează în OpenCart.
Ori de câte ori utilizatorul accesează orice adresă URL în OpenCart, este necesar acțiune obiectul este instanțiat pe baza traseu variabila șir de interogări. Iată fragmentul de la index.php
.
// Router dacă (isset ($ request-> get ['route'])) $ action = acțiune nouă ($ request-> get ['route']); altceva $ action = acțiune nouă ("common / home");
Și după aceea, expediere
se numește metoda.
$ controller-> dispatch (acțiune $, acțiune nouă ('error / not_found'));
O să sune expediere
metoda definită în fișierul situat la Sistem / motor / front.php
. În această metodă, veți găsi un fragment care execută buclă până când devine acțiune $
valoare setată la valoarea false.
în timp ce ($ action) $ action = $ this-> execute ($ action);
După cum puteți vedea, va apela metoda de execuție definită în același fișier până la acțiune $
se evaluează la fals. Aceasta inseamna ca, daca metoda controllerului returneaza un obiect de actiune, OpenCart va executa acea actiune inainte de a continua. Am putea profita de acest lucru și apelează la cealaltă acțiune din acțiunea însăși. Să vedem cum să realizăm asta!
Acum, să creăm a preaction_demo.php
fișier în preactiondemo
cu următorul conținut.
$ this, 'metoda' => 'index')); dacă file_exists (DIR_TEMPLATE. $ this-> config-> get ('config_template'). /template/preactiondemo/preaction_demo.tpl ')) $ this-> response-> setOutput ($ this-> load-> vizualizați ($ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl', $ data)); altceva $ this-> response-> setOutput ($ this-> load-> view ('default / template / preactiondemo / preaction_demo.tpl', $ date));
Dacă $ pavilion
este adevărat, vom returna instanța clasei de acțiune și, așa cum am văzut, dacă procesul de expediere primește un obiect de acțiune, va continua acțiunea respectivă. Deci, în acest caz, va apela înființat
metodă a comun
controlor. Reamintește common.php
fișierul pe care l-am creat în secțiunea anterioară.
Cel mai important lucru pe care trebuie să-l observăm este că trecem array ('controller' => $ this, 'method' => 'index')
ca argument, care va fi trecut în cele din urmă la primul argument al înființat
metodă în comun
controlor. Ne va ajuta să ne întoarcem la index
metodă a preaction_demo
controler după inițializarea variabilelor.
Mai mult, în înființat
metodă am definit câteva variabile comune, cum ar fi antetul, subsolul etc. Și, în final, transferăm controlul înapoi la controlerul original de unde înființat
metoda a fost apelată folosind următoarea declarație.
$ args ['controller'] -> $ args ['metoda'] ($ date, FALSE);
Desigur, trebuie să trecem variabilele inițializate în înființat
metoda prin $ date
la controlerul original, astfel încât să poată fi utilizat acolo, care este scopul principal al acestui articol. A trecut ca primul argument al apelului de mai sus. Al doilea argument este foarte important deoarece va fi inițializat la $ pavilion
variabil. Facem în mod deliberat acest lucru pentru a evita buclă infinită.
În cele din urmă, să mergem mai departe și să ne pregătim fișierul de vizualizare la Catalog / Vedere / tema / default / template / preactiondemo / preaction_demo.tpl
cu următorul cod.
Acum că am terminat configurarea, mergeți mai departe și deschideți http: //youropencartstoreurl/index.php? Route = preactiondemo / preaction_demo în browserul dvs. Ar trebui să vedeți mesajul "Am fost setat de metoda" setup "din fișierul" common "controller." în acea pagină!
Deci, în acest fel ați putea configura codul comun într-un singur loc și numiți acea acțiune de la ceilalți controlori. Desigur, va evita duplicarea codului și este mai ușor să schimbați codul care este comun în toate modulele.
Astăzi, ați învățat un truc răcoros în OpenCart: cum să apelați o acțiune din cadrul acțiunii! Desigur, există și alte modalități de a realiza acest lucru, dar este ceva ce m-am gândit în ultima vreme și am crezut că ar trebui să o împărtășesc cu dvs. și să obțin feedbackul dvs.!