Controlere personalizate în OpenCart 2

Astăzi, vom trece prin conceptul de controlori în OpenCart 2.x. Odată cu lansarea versiunii OpenCart 2.x, au fost introduse modificări de cadru care necesită o actualizare dacă ați realizat module personalizate în versiunea anterioară - OpenCart 1.x. Vom trece printr-un exemplu practic despre ceea ce vom numi Cartea de oaspeți în acest tutorial.

Înainte de a merge mai departe în acest articol, ați putea lua în considerare acest lucru ca o continuare a ceea ce am scris mai devreme. În acest articol, am explicat cum să faceți o pagină personalizată în OpenCart 1.x și dacă ați urmat deja acest articol, puteți să treceți rapid prin majoritatea secțiunilor de astăzi! 

Desigur, este OpenCart 2.x care va fi discutat astăzi, deci asigurați-vă că urmați codul îndeaproape.

Dacă doriți să vedeți mai multe teorii despre modelul de cadru OpenCart și controlorii, puteți trece prin câteva secțiuni inițiale ale acelui articol. Acestea fiind spuse, nu vă oprește să urmați imediat acest articol, deoarece nu voi ignora niciun element esențial.

De ce un controler particularizat?

Ceva pe care îl întrebați în primul rând - de ce un controlor personalizat? Să înțelegem rapid ceea ce face controlerul în OpenCart înainte să intrăm în asta.

În contextul OpenCart, controlor este o componentă indispensabilă a cadrului care se ocupă în mod direct de procesul de rutare și face ca interfața utilizator. În acest proces se ocupă de alte componente importante precum limbajul, modelul și viziunea pentru a construi rezultatul final.

Când accesați orice pagină din OpenCart, cadrul OpenCart caută controlerul corespunzător și deleagă procesarea ulterioară acestuia. Fiind modular din punct de vedere al naturii, cadrul OpenCart oferă mai mulți controlori care se ocupă de funcționalități logic grupate.

De exemplu, cont grupul conține controlori care se ocupă de conectare, înregistrare, profil și cazuri similare de utilizare. În mod similar, verifică grupul de controlori se ocupă de procesul de creare a comenzii.

Pe scurt, atunci când doriți să creați o caracteristică care nu este în centrul OpenCart și dacă este nevoie de o nouă adresă URL - un traseu în terminologia OpenCart - trebuie să mergeți pentru un controler personalizat. Vă oferă control complet asupra procesului de creare a paginilor - ce elemente doriți să afișați pe pagina personalizată.

Creați un controler personalizat

Astăzi vom implementa o funcție de bază a cărții de oaspeți care demonstrează conceptul de controlere personalizate. În acest scop, vom construi o interfață în front-end care permite utilizatorilor clienților să trimită feedbackul prin introducerea numelui și mesajului.

Înainte de a continua, asigurați-vă că aveți o instalare de lucru OpenCart 2.3.x. Și asta este destul de mult pentru a începe să lucrăm la funcția noastră de cărți de oaspeți.

Pentru cei care nu sunt familiarizați cu structura OpenCart, locul pentru a căuta controlorii de front-end este Catalog / controler. Este directorul care gestionează toți controlorii după grupuri, pe baza funcțiilor pe care le oferă.

În cazul nostru, vom crea un grup separat numit Cartea de oaspeți. Continuați și creați un director Catalog / controler / carte de oaspeți. În acest director, creați un entry.php fișier cu următorul conținut. Este un fișier de controler care se ocupă de logica aplicațiilor și logica de prezentare a funcționalității cărții de oaspeți.

a sarcinii> Limba ( 'cartea de oaspeți / carte de oaspeți'); $ This-> pe documente> SetTitle ($ this-> language-> get ( 'Senzori si')); dacă ($ this-> request-> server ['REQUEST_METHOD'] == 'POST') && $ this-> validate ()) $ this-> load-> model ("cartea de oaspeți / cartea de oaspeți"); $ data ['subject'] = sprintf ('O nouă intrare în cărțile de oaspeți trimise de% s', $ this-> request-> post ['guest_name']); $ date ['mesaj'] = $ acest-> cerere-> post ['guest_message']; $ This-> model_guestbook_guestbook-> processGuestbookEntry ($ date); $ this-> session-> data ['succes'] = $ this-> language-> get ('text_success'); $ this-> response-> redirect ($ this-> url-> link ('guestbook / entry', 'true')); $ data ['succes'] = "; dacă isset ($ this-> session-> data ['succes'])) $ data ['succes'] = $ this-> session-> data ['succes']; unset ($ this->> Session- date [ 'succes']);  date $ ['breadcrumbs'] = array (); $ data ['breadcrumbs'] [] = array ('text' => $ this-> language-> get ('text_home'), 'href' )); $ data ['breadcrumbs'] [] = array ('text' => $ this-> language-> get ('title_title'), 'href' , $ date ['title_title'] = $ this-> language-> get ('title_title'); $ data ['entry_guest_name'] = $ this-> language-> get ; $ date ['entry_guest_message'] = $ this-> language-> get ('entry_guest_message'); $ data ['entry_submit'] = $ this-> language-> get (' aceasta este o eroare ['nume_proprietar'])) $ data ['error_guest_name'] = $ this-> error ['nume_proprietate']; altceva $ data ['error_guest_name'] = ";  dacă (isset ($ this-> error ['guest_message'])) $ data ['error_guest_message'] = $ aceasta-> eroare ['guest_message'];  altceva $ data ['error_guest_message'] = "; $ date ['action'] = $ this-> url-> link (" carte de oaspeți / intrare "," true "); dacă isset ($ this-> request-> post ['guest_name'])) $ data ['nume_proprietate'] = $ this-> request-> post ['guest_name'];  altfel $ data ['guest_name'] = "; dacă isset ($ this-> request-> post ['guest_message'])) $ data ['guest_message'] = $ this-> request-> ['guest_message']; altceva $ data ['guest_message'] = ";  $ data ['column_left'] = $ this-> load-> controler ('common / column_left'); $ data ['column_right'] = $ acest-> încărcare-> controler ('common / column_right'); $ data ['content_top'] = $ acest-> încărcare-> controler ('common / content_top'); $ data ['content_bottom'] = $ acest-> încărcare-> controler ('common / content_bottom'); $ data ['footer'] = $ acest-> încărcător-> controler ("common / footer"); $ data ['header'] = $ acest-> încărcător-> controler ('common / header'); $ this-> response-> setOutput ($ this-> load-> view ('guestbook / entry', $ date));  funcția protejată validate () if (utf8_strlen (trim ($ this-> request-> post ['guest_name'])) < 1)  $this->eroare ['host_name'] = $ this-> language-> get ('error_guest_name');  dacă (utf8_strlen (trim ($ this-> request-> post ['guest_message'])) < 1)  $this->eroare ['guest_message'] = $ this-> language-> get ('error_guest_message');  return! $ this-> error;  

Conform convențiilor de numire OpenCart, numele clasei începe cu Controlor cuvânt cheie urmat de numele directorului, Cartea de oaspeți în cazul nostru, în care se află fișierul de clasă. Mai mult, numele fișierului de clasă, Intrare în cazul nostru, este atașat la sfârșit.

Fiecare clasă de controler oferă o de facto index care se ocupă de cea mai mare parte a logicii controlerului. Apoi, vom trece prin codul din index și vom crea și alte fișiere după cum este necesar.

De cele mai multe ori, vom începe prin includerea fișierului lingvistic pentru grupul specific. Este modul în care OpenCart gestionează etichetele de limbă statică pe toată aplicația. Desigur, aceasta face ca punerea în aplicare a site-urilor multilingvistice să fie o briză.

$ This-> a sarcinii> limba ( 'cartea de oaspeți / carte de oaspeți');

Înainte de a merge mai departe, să creăm fișierul lingvistic corespunzător astfel încât controlorul să-l găsească. Creeaza o Catalog / language / ro-RO / cartea de oaspeți / guestbook.php fișier cu următorul conținut.

După cum puteți vedea, doar atribuim etichete cu valorile lor în matricea de limbi.

Înapoi la controlorul nostru, următorul lucru este să setați eticheta titlului HTML pentru pagina noastră.

$ This-> pe documente> SetTitle ($ this-> language-> get ( 'Senzori si'));

Utilizatorii cu ochi ascuțiți vor fi observat că am folosit-o Senzori si limbă variabilă definită în fișierul de limbă creat cu un moment în urmă.

Pentru a înțelege următoarea bucată de cod, trebuie să creați un fișier model. Deci, pentru o clipă, vă redirecționez pentru a crea fișierul modelului la Catalog / modelul / cartea de oaspeți / guestbook.php cu următorul conținut.

protocol = $ this-> config-> get ('config_mail_protocol'); $ mail-> parametru = $ this-> config-> get ('config_mail_parameter'); $ mail-> smtp_hostname = $ this-> config-> get ('config_mail_smtp_hostname'); $ mail-> smtp_username = $ this-> config-> get ('config_mail_smtp_username'); $ mail-> smtp_password = html_entity_decode ($ this-> config-> get ('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $ mail-> smtp_port = $ this-> config-> get ('config_mail_smtp_port'); $ mail-> smtp_timeout = $ this-> config-> get ('config_mail_smtp_timeout'); $ Mail-> Setto ($ this-> configura cam> get ( 'config_email')); $ Mail-> setFrom ($ this-> configura cam> get ( 'config_email')); $ mail-> setSender (html_entity_decode ($ this-> config-> get ('config_name'), ENT_QUOTES, 'UTF-8')); $ Mail-> setSubject ($ date [ 'subiect']); $ Mail-> setText ($ date [ 'mesaj']); $ Mail-> trimite ();  

În OpenCart, modelul este responsabil pentru gestionarea logicii de afaceri a aplicației. Dacă doriți să implementați orice logică care implică o bază de date, acesta este locul unde ar trebui să meargă.

Convenția de numire a clasei de model este similară celei din clasa de controler. Pentru a păstra lucrurile simple, am implementat o metodă processGuestbookEntry care notifică administratorul magazinului prin e-mail atunci când un utilizator trimite o intrare din carte de oaspeți. Destul de simplu, huh?

Să ne întoarcem la controlorul nostru și să examinăm următoarea bucată de cod în coada de așteptare.

dacă ($ this-> request-> server ['REQUEST_METHOD'] == 'POST') && $ this-> validate ()) $ this-> load-> model ("cartea de oaspeți / cartea de oaspeți"); $ data ['subject'] = sprintf ('O nouă intrare în cărțile de oaspeți trimise de% s', $ this-> request-> post ['guest_name']); $ date ['mesaj'] = $ acest-> cerere-> post ['guest_message']; $ This-> model_guestbook_guestbook-> processGuestbookEntry ($ date); $ this-> session-> data ['succes'] = $ this-> language-> get ('text_success'); $ this-> reply-> redirect ($ this-> url-> link ('carte de oaspeți / intrare', 'true'));

Verifică o validare POST solicită și validarea de bază a datelor trimise de utilizator prin apelarea valida metodă.

Codul $ This-> a sarcinii> model de ( 'cartea de oaspeți / carte de oaspeți') este folosit pentru a încărca modelul pe care l-am definit acum un moment. Imediat după aceea, pregătim $ date array bazat pe intrarea utilizatorului și apelarea processGuestbookEntry , care notifică administratorul magazinului cu privire la intrarea din cărțile de vizită. În cele din urmă, redirecționăm utilizatorul înapoi la pagina de intrare a cărții de oaspeți.

Înainte de a intra în controler, următorul fragment stabilește mesajul de succes care va fi afișat la trimiterea formularului.

$ data ['succes'] = "; if (isset ($ this-> session-> data ['succes']) ]; unset ($ this-> session-> data ['succes']);

După aceasta, există un fragment care este utilizat pentru a crea link-uri de navigare pentru pagină.

$ date ['breadcrumbs'] = array (); $ data ['breadcrumbs'] [] = array ('text' => $ this-> language-> get ('text_home'), 'href' )); $ data ['breadcrumbs'] [] = array ('text' => $ this-> language-> get ('title_title'), 'href' ,", Adevărat) );

Fragmentul următor este unul important și este ceva ce veți folosi de cele mai multe ori pentru a transmite informații din metoda controlerului în șablonul de vizualizare.

$ data ['title_title'] = $ acest-> limbă-> obține ('title_title'); $ date ['entry_guest_name'] = $ acest-> limbă-> obține ('entry_guest_name'); $ data ['entry_guest_message'] = $ acest-> limbă-> obține ('entry_guest_message'); $ data ['entry_submit'] = $ acest-> limbă-> primi ('entry_submit');

Similar cu atribuirea variabilelor, OpenCart inițializează elementele comune ale antetului paginii, subsolului și a celor asemănătoare - așa cum este descris în fragmentul următor.

$ data ['column_left'] = $ acest-> încărcător-> controler ('common / column_left'); $ data ['column_right'] = $ acest-> încărcare-> controler ('common / column_right'); $ data ['content_top'] = $ acest-> încărcare-> controler ('common / content_top'); $ data ['content_bottom'] = $ acest-> încărcare-> controler ('common / content_bottom'); $ data ['footer'] = $ acest-> încărcător-> controler ("common / footer"); $ data ['header'] = $ acest-> încărcător-> controler ('common / header');

În cele din urmă, cheama șablonul de vizualizare pentru a afișa pagina actuală!

$ this-> response-> setOutput ($ this-> load-> view ('guestbook / entry', $ date));

Desigur, nu am construit încă un șablon de vizualizare. Este momentul perfect pentru a face asta! Mergeți și creați o Catalog / Vedere / tema / default / șablon / carte de oaspeti / entry.tpl fișier cu următorul conținut.

 
  • „>