Configurați codul de control comun în OpenCart

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

Configurați codul de comandă comună

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.

Înțelegerea procesului de expediere

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

Apelați controlerul comun și vizualizați setarea

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.

Concluzie

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

Cod