Ca dezvoltator de module, cel mai adesea va trebui să creați o schemă personalizată în dezvoltarea de module personalizate OpenCart de zi cu zi. Ea este deja furnizată, ca și în cazul celorlalte cadre, sub formă de cârlige diferite în arhitectura modulului OpenCart.
Înainte de a merge mai departe și de a explora cârligele menționate anterior, să explorăm conceptul de extensii în OpenCart. Privind din partea de sus, este o extensie în OpenCart care vă permite să îmbogățiți funcționalitatea de bază a OpenCart. Prin instalarea acestuia, adăugați caracteristici la magazinul din față, fie că este vorba de o galerie de imagini simplă sau de funcții drag-and-drop.
Mai mult, extensiile, în funcție de funcționalitatea pe care o oferă, sunt clasificate în grupuri logice. Ca exemplu rapid, extensia de plată adaugă noi modalități de plată în checkout-ul din partea frontului, în timp ce este o extensie anti-fraudă care vă permite să detectați activitățile de spam în magazinul dvs. Treceți la spate și aruncați o privire la lista de sub Extensii care afișează diferitele tipuri de extensii acceptate în OpenCart.
Veți fi surprinși să știți că a modul este, de asemenea, doar un alt fel de extensie în OpenCart. Fiecare extensie este construită în jurul fluxului de lucru comun al modului în care lucrurile ar trebui să funcționeze în ecosistemul OpenCart. Și cârligele vă permit să efectuați anumite acțiuni bazate pe evenimente specifice, fie că rulează un cârlig de instalare în timpul activării modulului, fie că curăță gunoiul în timpul dezinstalării.
Vor fi acele cârlige de instalare și dezinstalare care vor fi discutate pe parcursul acestui articol. Deși vor fi discutate în contextul modulelor, nu văd nimic care vă oprește să aplicați aceeași metodă și altor tipuri de extensii, deci nu ezitați să explorați aceste fișiere pe cont propriu.
Este cea mai recentă versiune a OpenCart care oferă fragmente distribuite în acest tutorial. De la scris, este versiunea stabilă de 2.1.0.2.
În această secțiune, vom explora exact ce cârlig de instalare este folosit pentru. Du-te și deschide-te admin / controler / extensie / module.php
în editorul de text preferat și găsiți instalare
metodă. Ar trebui să arate ceva de genul:
a sarcinii> limbaj ( 'extensie / modulului'); $ This-> pe documente> SetTitle ($ this-> language-> get ( 'Senzori si')); $ This-> a sarcinii> modelul ( 'extindere / extindere'); $ This-> a sarcinii> Model ( 'extensie / modulului'); dacă ($ this-> validate ()) $ this-> model_extension_extension-> install ('module', $ this-> request-> get ['extension']); $ This-> a sarcinii> Model ( 'utilizator / user_group'); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'access', 'module /' $ this-> request-> get ['extension']); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'modify', 'module /' $ this-> request-> get ['extension']); // Metoda apelului de instalare dacă există $ this-> load-> controller ('module /'. $ This-> request-> get ['extension']. '/ Install'); $ this-> session-> data ['succes'] = $ this-> language-> get ('text_success'); $ this-> response-> redirect ($ this-> url-> link ('extensie / modul', 'token ='. $ this-> session-> data ['token'], 'SSL')); $ this-> getList (); ...?>
Este cârligul de instalare generic pentru modulul care va fi apelat ori de câte ori încercați să instalați orice modul din back-end. Să trecem prin părțile importante ale acestei metode.
În primul rând, se încarcă fișierele model care sunt necesare pentru activitățile ulterioare. $ This-> model_extension_extension-> instalați
Apelul de metodă asigură că este adăugată o înregistrare în baza de date pentru acest modul particular.
După aceea, există câteva chestii ACL și se realizează prin apelarea addPermission
metodă. Se asigură că utilizatorul curent, admin, ar trebui să poată accesa setările specifice modulului și să le modifice.
În cele din urmă, el numește instalare
metoda modulului care se instalează. Nu te confunda cu metoda de instalare pe care o aflăm deja - se va numi modul specific instalare
dacă există.
De exemplu, dacă încercați să instalați Conectați-vă cu PayPal modul, acesta va apela o metodă de instalare definită în fișier admin / controler / modul / pp_login.php
așa cum se arată mai jos.
a sarcinii> modelul ( 'extindere / eveniment'); $ this-> model_extension_event-> addEvent ('pp_login', 'post.customer.logout', 'modul / pp_login / logout'); ...?>
De la introducerea OpenCart 2.x, există câteva caracteristici incitante incluse, iar observatorul evenimentului este unul dintre ele. Vă permite să adăugați evenimente specifice fiecărui modul, iar alte module ar putea configura observatori pentru acest eveniment, astfel încât aceștia să poată executa un cod arbitrar atunci când acel eveniment este declanșat. Și asta este exact ceea ce sa demonstrat în metoda de instalare de mai sus, care adaugă post.customer.logout
eveniment personalizat!
În cazul Conectați-vă cu PayPal modulul, a fost o chestie destul de simplă, dar uneori veți avea nevoie de mai mult dacă doriți să injectați o schemă personalizată sau ceva similar. Să tragem în metoda noastră de instalare din PayPal Express Checkout extensie de plată. Du-te și deschide-te admin / controler / plata / pp_express.php
.
a sarcinii> Model ( 'plată / pp_express'); $ This-> model_payment_pp_express-> install (); ...?>
Mai întâi, acesta încarcă fișierul model corespunzător și, prin intermediul căruia îl apelează instalare
metoda modelului. De regulă, ori de câte ori doriți să manipulați o schemă, trebuie să implementați codul respectiv în metoda de instalare a modelului, mai degrabă decât să îl puneți direct în metoda de instalare a controlerului.
Acum, să tragem rapid metoda de instalare definită în fișierul model admin / modelul / plata / pp_express.php
.
db-> interogare ("CREATE TABLE IF NU EXISTS" "DB_PREFIX" paypal_order "('paypal_order_id' int (11) NOTA NULL AUTO_INCREMENT, 'order_id' int (11) NOTAT NULL, 'date_added' 'DATETIME NOT NULL', 'capture_status' ENUM ('Complet', 'NotComplete') DEFAULT NULL, 'currency_code' CHAR (3) NOT NULL, 'authorization_id' VARCHAR NU NULL, CHEIE PRIMARĂ ('paypal_order_id')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; "); $ this-> db-> interogare ("CREATE TABLE IF NU EXISTS" "DB_PREFIX" paypal_order_transaction "('paypal_order_transaction_id' int (11) NOT NULL AUTO_INCREMENT, 20) NU NULL, 'parent_transaction_id' CHAR (20) NU NULL, 'date_added' DATETIME NULL, 'notă' VARCHAR (255) NOT NULL, 'msgsubid' CHAR NULL, 'pay_type' ENUM ('none', 'echeck', 'instant', 'refund', 'void') DEFAULT NULL, 'payment_status' CHAR (20) 'transaction_entity' CHAR (50) NU NULL, 'suma' DECIMAL (10, 2) NU NULL, 'debug_data' TEXT NOT NULL, 'call_data' TEXT NOT NULL, KEY PRIMARY ('paypal_order_transaction_id') ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; "); ...?>
În cele din urmă, este ceva de mândru despre! Dupa cum puteti vedea, cateva tabele personalizate MySQL sunt create folosind API-ul bazei de date OpenCart. Deci, acesta este modul de aplicare a modificărilor legate de bază de date utilizând metoda de instalare a modelului.
Deci, asta e în ceea ce privește cârligul de instalare. Sper că nu este atât de complicat cum pare la prima vedere. Să spunem așa. Procesul este inițiat prin declanșarea unei metode de instalare specifice extensiei, care la rândul său solicită metoda de instalare a extensiei instalate, dacă există. În cele din urmă, metoda de instalare a modelului este apelată de la metoda de instalare a controlerului în cazul în care este necesară manipularea unei baze de date de către respectiva extensie.
Această secțiune, paranteza secțiunii anterioare, evidențiază evenimentele din cârligul de dezinstalare. Vom proceda în același mod ca și în cazul metodei de instalare din secțiunea precedentă, deci să luăm imediat codul dezinstalare
cârlig din fișier admin / controler / extensie / module.php
.
a sarcinii> limbaj ( 'extensie / modulului'); $ This-> pe documente> SetTitle ($ this-> language-> get ( 'Senzori si')); $ This-> a sarcinii> modelul ( 'extindere / extindere'); $ This-> a sarcinii> Model ( 'extensie / modulului'); dacă ($ this-> validate ()) $ this-> model_extension_extension-> dezinstalați ('module', $ this-> request-> get ['extension']); $ This-> model_extension_module-> deleteModulesByCode ($ this-> request-> obține [ 'extensie']); $ This-> a sarcinii> modelul ( 'setare / setare'); $ This-> model_setting_setting-> deleteSetting ($ this-> request-> obține [ 'extensie']); // Invitați metoda de dezinstalare dacă există $ this-> load-> controller ('module /'. $ This-> request-> get ['extension']. '/ Uninstall'); $ this-> session-> data ['succes'] = $ this-> language-> get ('text_success'); $ this-> response-> redirect ($ this-> url-> link ('extensie / modul', 'token ='. $ this-> session-> data ['token'], 'SSL')); $ this-> getList (); ...?>
Din nou, ar trebui să pară puțin familiar, deoarece majoritatea este codul de boilerplate. Fragmentul important pentru a începe este apelul către dezinstalare
care șterge intrarea extensiei curente care se dezinstalează de la extensie Tabelul MySQL.
Apoi, sună deleteModulesByCode
, care șterge modulele asociate extensiei. Este o metodă specială care se găsește numai în asta modul un fel de extensie - nu o veți găsi în celelalte extensii cum ar fi plata, transport, fraudă etc..
Motivul este că puteți replica fiecare modul pentru a crea mai multe instanțe. De exemplu, ați putea arăta diferite stindard module pe pagini diferite. Pe de altă parte, nu are sens să replicăm celelalte tipuri de extensii. Din nou, ca exemplu, există doar o singură instanță necesară pentru PayPal extensie de plată în front-end.
Apoi, șterge variabilele de configurare legate de modul apelând deleteSetting
metodă. În cele din urmă, el numește dezinstalare
metoda modulului care este dezinstalat.
Să ne deschidem admin / controler / modul / pp_login.php
pentru a vedea cum arată metoda de dezinstalare.
a sarcinii> modelul ( 'extindere / eveniment'); $ This-> model_extension_event-> deleteEvent ( 'pp_login'); ...?>
Destul de simplu, nu? Este doar anularea chestii care au fost injectate în metoda de instalare a Conectați-vă cu PayPal modul. Reamintim că am creat un eveniment nou post.customer.logout în timpul instalării, este evident că trebuie să îl ștergem în timpul dezinstalării pentru a ne asigura că nu părăsim niciun gunoi specific modulului.
De asemenea, să aruncăm o privire rapidă asupra metodei de dezinstalare a PayPal Express Checkout extensie de plată pe măsură ce am trecut prin metoda de instalare a acesteia în secțiunea anterioară. Luați următorul fragment de admin / controler / plata / pp_express.php
.
a sarcinii> Model ( 'plată / pp_express'); $ This-> model_payment_pp_express-> dezinstalare (); ...?>
Chestii destul de așteptate - încarcă modelul și apelează metoda de dezinstalare. Acest lucru ne oferă, de asemenea, un motiv puternic pentru a deschide fișierul model admin / modelul / plata / pp_express.php
și explorați metoda de dezinstalare, de asemenea.
db-> interogare ("DROP TABLE IF EXISTS" "DB_PREFIX" paypal_order_transaction ";); $ this-> db-> interogare ("DROP TABLE IF EXISTS" "DB_PREFIX" paypal_order ";); ...?>
Pur și simplu renunțăm la tabelele MySQL create mai devreme, pentru că nu vrem să ne întrebe cineva: "Cum ai putut lăsa gunoiul ăsta?"
Deci, asta a fost povestea, sperăm, drăguță, de a instala și dezinstala cârlige în OpenCart. Următoarea și ultima secțiune împletesc rapid conceptele învățate până acum într-un modul simplu, dar funcțional, personalizat, pentru că este ceva frumos să ai în sesiunea teoretică a pisicilor.
În această secțiune, vom crea un modul de administrare Demo care nu va face prea mult decât să creeze o schemă nouă în timpul instalării și să o abandoneze în timpul dezinstalării.
Mai întâi, să creăm un fișier lingvistic, astfel încât modulul să fie preluat în back-end. Continuați și creați un fișier admin / limba / engleză / modul / demo.php
cu următorul conținut.
Apoi, trebuie să creați un fișier model care să dețină codul real și interesant al modulului personalizat. Fișierul model trebuie plasat la
admin / modelul / modul / demo.php
. Creează o Demo Tabelul MySQL îninstalare
și o scade îndezinstalare
metodă.db-> interogare ("CREATE TABLE IF NU EXISTS" "DB_PREFIX" demo "('demo_id' int (11) = MyISAM DEFAULT COLLATE = utf8_general_ci; "); dezinstala funcția publică () $ this-> db-> interogare ("DROP TABLE IF EXISTS" "DB_PREFIX" demo ";);În cele din urmă, continuați și creați un fișier de controler
admin / controler / modul / demo.php
cu următorul conținut.a sarcinii> modelul ( 'modul / demo'); $ This-> model_module_demo-> install (); dezinstala funcția publică () $ this-> load-> model ('module / demo'); $ This-> model_module_demo-> dezinstalare ();Este simplu, așa cum ar trebui să fie - încarcă modelul și apelează metodele corespunzătoare în funcție de acțiunile efectuate.
Continuați și încercați. Ar trebui să fie listate ca a Modulul Demo sub Extensii> Module. Instalați-l și ar trebui să vedeți Demo Tabelul MySQL creat în back-end, și, desigur, nu uitați să îl dezinstalați pentru a renunța la tabel.
Concluzie
Astăzi, am discutat un aspect important al procesului de instalare OpenCart, cârligele de instalare și dezinstalare. Am trecut prin detaliile acestor cârlige, iar în ultima parte a articolului am construit un modul simplu ca dovadă a conceptului.
Desigur, interogările și comentariile sunt întotdeauna binevenite!