Notificările îmbunătățite pentru Script în OpenCart 2.2.x.x

Astăzi, vom discuta despre una dintre cele mai bune caracteristici ale notificărilor din scriptul OpenCart. Deși au fost disponibile de la lansarea versiunii OpenCart 2.x, au fost îmbunătățite în lansarea recentă a OpenCart 2.2.x.x. De-a lungul acestui tutorial, vom discuta conceptul și îl vom demonstra prin crearea unui modul de lucru.

Introducere

În calitate de dezvoltator, va trebui adesea să modificați fluxul comportamentului cadrului de bază, indiferent dacă este vorba de a adăuga o nouă caracteristică în cadrul sau de a îmbunătăți fluxul de lucru existent. În ambele cazuri, trebuie să aveți control asupra fluxului de lucru, astfel încât să vă puteți conecta la funcționalitate și să atingeți comportamentul dorit.

Să încercăm să o înțelegem printr-un exemplu simplu. Dacă rulați un magazin online popular, este posibil ca cele mai populare produse din magazinul dvs. să fie vândute în curând. În acest caz, ar fi bine să primiți o notificare despre aceasta și să luați măsurile adecvate în consecință.

Deci, ce puteți face în exemplul menționat mai sus este să căutați metoda care se numește atunci când este plasată comanda. Apoi, puteți să vă conectați la fluxul de creare a comenzii astfel încât să puteți controla momentul plasării comenzii. Aceasta vă permite să executați o piesă aleatorie de cod în contextul evenimentului chemat. Aici intră notificările evenimentului în imagine, permițându-ne să executăm coduri arbitrare și să modificăm rezultatul rezultat.

Ce sunt notificările scripturilor?

În conformitate cu documentația oficială OpenCart:

În versiunea 2.2+ am adăugat un nou sistem de evenimente, acestea fiind cârlige care pot fi apelate înainte și după evenimente cum ar fi apelul unei metode de controler, apelul metodei model sau șabloanele încărcate. Acestea dau posibilitatea de a manipula parametrii metodei de intrare și ieșirea returnată.

Asta e cu adevărat puternic, așa cum ai putut să creezi literalmente în orice apel de metodă și să schimbi rezultatul returnat de această metodă. Cu toate acestea, trebuie să fiți atenți în timpul implementării cârligelor, dacă vă asumați responsabilitatea de a modifica rezultatul rezultat al apelului. Asta pentru că dacă implementarea dvs. returnează orice valoare, va opri orice alte acțiuni ale evenimentului care vor fi apelate.

Ce este necesar pentru implementarea notificărilor de script? Iată pașii necesari:

Înregistrați-vă evenimentul

Când înregistrați evenimentul cu OpenCart, spuneți OpenCart pe care doriți să îl monitorizați xyz acțiune și, dacă se întâmplă acest lucru, vă rugăm să executați acțiunea foo în fișierul controlerului de bare. În timp ce faceți acest lucru, aveți două opțiuni de alegere înainte și după.

Dacă alegeți opțiunea anterioară, OpenCart va executa acțiunea foo înainte de acțiunea care este monitorizată, iar în cazul opțiunii după aceasta va executa foo după acțiune. În cazul opțiunii anterioare, este important să rețineți că, dacă metoda foo returnează ceva, OpenCart nu va executa codul original al metodei care este monitorizat deloc.

Mai târziu, în acest articol, vom vedea cum să înregistrăm un eveniment în timpul implementării personalizate a modulului.

Implementați acțiunea țintă

Apoi, va trebui să implementați controlerul și metoda de acțiune corespunzătoare care a fost asociată cu un eveniment în primul pas. Acesta este locul în care codul personalizat ar trebui să intre. OpenCart trimite argumente specifice contextului pentru metoda foo, astfel încât să îl puteți utiliza dacă este necesar.

Deci, este doar o bucatica a ceea ce notificarile script sunt capabile de.

Avem încă nevoie de OCMOD?

Dacă sunteți familiarizați fie cu vQmod, fie cu OCMOD, este posibil să virați mânecile împotriva funcției de notificări pentru evenimente. La urma urmei, ați putea obține totul prin bunurile menționate mai sus, pe care le-ați fi realizat oricum cu notificări de eveniment.

Pentru cei care nu sunt familiarizați cu vQmod sau OCMOD, enumerați mai jos, sunt articole frumoase introductive care o explică.

  • Noul sistem de modificări în OpenCart 2
  • Modificarea core de OpenCart folosind vQmod

Deci, întrebarea este, dacă ați putea folosi vQmod sau OCMOD pentru a modifica fișierele de bază, de ce ați folosi notificările de script? Din cauza faptului că pot exista mai multe pluginuri OCMOD care încearcă să modifice același cod și care ar putea duce la conflicte. În cazul evenimentelor, nu există șanse de conflict deoarece fiecare eveniment este executat într-o anumită ordine.

Deci, concluzia este că, dacă este posibil să folosiți evenimente, du-te pentru asta. Pe de altă parte, dacă simțiți că nu există un eveniment disponibil pentru cazul dvs. de utilizare, este bine să mergeți cu OCMOD.

Creați un modul back-end

În această secțiune, vom construi un modul care să demonstreze modul de utilizare a notificărilor de eveniment în OpenCart. Presupun că sunteți conștient de procesul de dezvoltare a modulelor de bază în OpenCart, deoarece vom trece prin elementele de bază. Dacă nu sunteți conștient de acest lucru, iată un articol frumos pe care îl puteți trece repede.

Să înțelegem cazul de utilizare înainte să continuăm și să îl implementăm. Să presupunem că aveți un magazin care preia informațiile de catalog din back-end-ul terț API. Ați configurat un cron care aduce în mod regulat informațiile și le inserează în baza de date OpenCart, astfel încât să poată fi afișată în front-end. Deși ați creat un cron care actualizează informațiile la intervale regulate, doriți să vă asigurați că informațiile afișate în front-end trebuie să fie în timp real.

În front-end, OpenCart apelează getProduct când afișează pagina cu detaliile produsului. Deci, acesta este candidatul ideal pentru a vă conecta și actualiza baza de date în cazul în care informațiile API s-au schimbat.

Deci, să începem mai întâi crearea fișierelor back-end.

Continuați și creați admin / controler / modul / demoevent.php fișier cu următorul conținut.

a sarcinii> modelul ( 'extindere / eveniment'); $ this-> model_extension_event-> addEvent ('event_product_info', 'catalog / model / catalog / product / getProduct / before', 'custom / product / info');  dezinstala funcția publică () $ this-> load-> model ('extensie / eveniment'); $ This-> model_extension_event-> deleteEvent ( 'event_product_info'); 

După cum am discutat mai devreme, primul lucru pe care ați dori să-l faceți este înregistrarea evenimentului. Este cârligul de instalare pe care îl vom folosi pentru a face acest lucru, deoarece va fi executat când modulul este instalat.

Am folosit-o addEvent metoda modelului de eveniment în cadrul extensie director, iar această metodă are trei argumente.

Primul argument, event_product_info, este numele evenimentului. Puteți să-i spuneți ceva, dar asigurați-vă că este unic.

Al doilea argument este foarte important și subliniază metoda pe care ați dori să o introduceți. În cazul nostru, trebuie să alegem getProduct metodă a Produs Model în cadrul Catalog director. Deci ierarhia este Modelul / Catalog / produs / getProduct. În afară de aceasta, ar trebui să fie prefixată de oricare dintre ele catalog sau admin, care reprezintă cererea. În cazul nostru, este catalog pe măsură ce ne implicăm în metoda front-end. În cele din urmă, aceasta va fi post-fixată fie înainte, fie după aceea, ceea ce îi spune OpenCart să ruleze codul în consecință.

Al treilea argument indică acțiune a controlerului dvs. care va fi declanșată atunci când evenimentul este declanșat. Este programată personalizat / produs / info, astfel încât va trebui să creați o Produs controler cu info metoda în cadrul personalizat director, așa cum vom face într-un moment.

În cele din urmă, metoda de dezinstalare este utilizată pentru a elimina evenimentul în timpul dezinstalării modulului.

Apoi, să creăm un fișier lingvistic pentru modulul nostru particularizat admin / language / ro-RO / modul / demoevent.php cu următorul conținut.

Am terminat configurarea fișierelor de back-end. Acum, ar trebui să puteți vedea modulul nostru enumerat mai jos Extensii> Module în back-end-ul OpenCart. Continuați și instalați-o. Acum, vom merge mai departe și vom crea fișierele din front-end.

Creați un fișier model Catalog / modelul / personalizat / product.php cu următorul conținut. Este un fișier model tipic, conform structurii OpenCart.

db-> interogare ("SELECT date_modified FROM". DB_PREFIX "produs WHERE product_id = ''. (int) $ product_id." '"); returnează $ query-> row;  funcția updateProductInfo ($ product_id, $ data) include_once __DIR __. '... / ... / ... /admin/model/catalog/product.php'; $ modelCatalogProduct = nou modelCatalogProduct (); $ modelCatalogProduct-> editaProduct ($ product_id, $ data); 

Ea implementează două metode importante. getProductLastModifiedInfo metoda este folosită pentru a aduce ultima dată modificată a produsului și updateProductInfo metoda este utilizată pentru a actualiza informațiile despre produs în baza de date. Într-un moment, vom vedea cum vor fi utilizate aceste metode.

În cele din urmă, să creăm unul dintre cele mai importante fișiere din acest articol, Catalog / controler / personalizat / product.php, cu următorul conținut. Este un fișier de controler care implementează info metoda de acțiune care este setată să fie apelată atunci când getProduct metodă a Modelul produsului se numește.

a sarcinii> modelul ( 'personalizat / produs'); $ product_modified_date = $ acest-> model_custom_product-> getProductLastModifiedInfo ($ product_id); dacă $ product_modified_date ['date_modified']! = $ product_api_info ['date_modified']) // informații api s-au modificat, așa că mai întâi să actualizăm db // Notă: probabil că doriți să formatați $ product_api_info conform formatului cerut de editProduct $ this-> model_custom_product-> updateProductInfo ($ product_id, $ product_api_info); // retur ultimele produse / informații în timp real despre produs retur array ('product_id' => $ product_api_info ['product_id'], 'name' => $ product_api_info ['name'], 'description' => $ product_api_info [ ], 'meta_keyword' => $ product_api_info ['meta_keyword'], 'tag' => $ product_api_info ['meta_title'], tag '],' model '=> $ product_api_info [' model '],' sku '=> $ product_api_info [' sku '],' upc '=> $ product_api_info [' upc '],' ean '=> $ product_api_info ['eb'], 'jan' => $ product_api_info ['jan'], 'isbn' => $ product_api_info ['isbn'], 'mpn' => $ product_api_info ['mpn' $ product_api_info ['locație'], 'cantitate' => $ product_api_info ['cantitate'], 'stock_status' => $ product_api_info ['stock_status'], 'image' => $ product_api_info [ => $ product_api_info ['manufacturer_id'], 'manufacturer' => $ product_api_info ['manufacturer'], 'price' => ($ product_api_info ['discount']? $ product_api_in ['special'], 'recompensă' => $ product_api_info ['recompensa'], 'points' => $ product_api_info [ 'points_class_id' => $ product_api_info ['tax_class_id'], 'date_available' => $ product_api_info ['date_available'], 'weight_class_id' => $ product_api_info ['weight_class_id' product_api_info ['weight_class_id'], 'lungime' => $ product_api_info ['lungime'], 'lățime' => $ product_api_info ['width'] = > $ product_api_info ['length_class_id'], 'subtract' => $ product_api_info ['subtract'], 'rating' => runda ($ product_api_info ['rating']), 'reviews' => $ product_api_info [ ? $ product_api_info ['reviews']: 0, 'minimum' => $ product_api_info ['minimum'], 'sort_order' => $ product_api_info ['sort_order'], 'status' => $ product_api_info [ date_added '=> $ product_api_info [' date_added '],' date_modified '=> $ product_api_info [' date_modified '],' vizualizat '=> $ product_api_info [' vizualizat ']); 

Lucrul important care trebuie menționat aici este că OpenCart furnizează argumente specifice contextului pentru metoda dvs. Primul $ traseu argument vă indică ruta asociată cu evenimentul care a fost declanșat. În cazul nostru, ar trebui să fie / Catalog produse / getProduct. Al doilea argument este id-ul produsului, deoarece este un argument necesar de către actual getProduct metodă.

Logica este ceva de genul asta: vom compara data modificată a produsului în baza de date OpenCart cu informațiile returnate de apelul API.

Deci, primul pas este să încărcați informațiile despre produs în timp real din API. Rețineți că api_call_to_fetch_product_info metoda este doar o metodă ingenioasă pe care ați dori să o înlocuiți cu apelul dvs. real API.

Apoi, folosim getProductLastModifiedInfo , care a fost creată în secțiunea anterioară, pentru a aduce data modificată a produsului din baza de date OpenCart.

În cele din urmă, facem comparația și, dacă data diferă, va actualiza baza de date OpenCart cu cele mai recente informații despre produs folosind updateProductInfo în clasa noastră de modele.

De asemenea, am returnat informațiile despre produs în format matrice în același mod ca și cel real getProduct ar fi revenit. Este important să rețineți că, deoarece am furnizat valoarea returnată în cârligul nostru, acesta nu va apela alte apeluri de eveniment, inclusiv apelul la original getProduct de asemenea.

Astfel, în acest fel, puteți influența fluxul de execuție în OpenCart. Este o modalitate foarte puternică de a modifica funcționalitatea de bază. Cu toate acestea, ar trebui să fiți atenți în timp ce vă apropiați de această soluție deoarece vă oferă un control total pentru a schimba rezultatul rezultant al oricărei metode.

Concluzie

Astăzi, am discutat despre una dintre trăsăturile interesante din OpenCart numite notificări de script. Am început cu o introducere la subiect și a doua jumătate a articolului a demonstrat cum să le folosim prin construirea unui modul de eveniment personalizat.

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

Întrebările și comentariile sunt întotdeauna binevenite!

Cod