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.
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ă.
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 apelareavalida
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 apelareaprocessGuestbookEntry
, 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.
- „>
Acesta este fișierul nostru principal de șablon de vizualizare care este responsabil pentru afișarea conținutului paginii noastre de carte de oaspeți. În acest fișier, am folosit doar variabilele care au fost configurate în controler
index
metodă.Este important să rețineți că reacția este ceva care vine încorporat cu versiunile recente ale OpenCart, susținute de cadrul Bootstrap. În afară de asta, este destul de ușor de înțeles chestii HTML obișnuite.
Deci, asta e în ceea ce privește configurarea fișierelor.
Avem totul la dispoziție acum, dar cum ai accesa asta de la front-end?
În partea frontală, puteți accesa pagina cărții de vizită adăugând variabila rutei querystring, astfel că adresa URL ar trebui să fie ceva de genul http: //your-opencart-store-url/index.php? Route = guestbook / entry.
Să înțelegem cum deschide OpenCart orice adresă URL la fișierul controlerului specific. Formatul variabilei de traseu este
Directorul / filename / METHODNAME
.
Directory
hărți componente la directorul de sub Catalog / controler
.nume de fișier
hărți până la numele fișierului de controler de sub catalog / controler / directory
.METHODNAME
dacă este specificat în traseu, altfel se va apela implicit index
metodă.Iată cum arată rezultatul final.
Desigur, puteți să o faceți și să o testați prin trimiterea formularului și trebuie să primiți o notificare prin e-mail adresei de e-mail care este înregistrată ca administrator de magazin.
În orice cadru, este întotdeauna interesant să continuați și să implementați funcționalitatea personalizată. Acesta a fost exact subiectul tutorialului de astăzi, în care am extins OpenCart și am dezvoltat controlori personalizați prin construirea unei funcții destul de simple, dar utile, a cărții de oaspeți.
În acest proces, ne-am dat seama că nu este vorba numai de controlorii - au existat puține alte elemente cheie care erau inevitabile. Deci, am ajuns să le introducem și pe acelea: model, limbă și vizualizare.
La final, a fost frumos să văd cazul de lucru pentru ceea ce am promis la începutul articolului. Deci, asta este pentru ziua de azi, și nu ezitați să vă lăsați întrebările și comentariile. De asemenea, mi-ar plăcea să aud de la dvs. dacă există vreun subiect anume pe care doriți să-l găsesc în următorul articol!
Ca întotdeauna, dacă căutați alte instrumente OpenCart, utilitare, extensii și așa mai departe, pe care le puteți utiliza în propriile proiecte sau pentru educația proprie, nu uitați să vedeți ce avem la dispoziție pe piață.
Dacă v-ați bucurat de acest articol, am mai multe în cazul în care doriți să treceți prin ele!