Înțelegeți suprascrierea în Magento Modele

În această serie, explorăm caracteristicile imperative disponibile în sistemul Magento eCommerce. În articolul precedent, am discutat despre cum să înlocuiți fișierele blocului de bază utilizând un modul particularizat. Astăzi, o voi extinde și voi demonstra cum puteți înlocui fișierele modelului de bază utilizând un fișier de configurare bazat pe XML.

De ce modele supradimensionate?

În Magento, modelele joacă un rol important pe măsură ce implementează cea mai mare parte a logicii de afaceri a caracteristicilor principale. Există momente când trebuie să modificați fluxul sau logica de afaceri în modele pentru a implementa caracteristicile personalizate. 

Este tentant să mergeți mai departe și să schimbați direct fișierele de bază, ceea ce pare a fi o soluție simplă și simplă. Acestea fiind spuse, este o practică proastă, deoarece face ca actualizarea Magento să fie foarte dificilă. Cele mai multe fișiere de bază pe care le modificați în mod direct, cu atât mai dificilă devine pentru dvs. de a urmări modificările dvs. și de a le aplica în timpul fiecărei versiuni de actualizare!

În acest tutorial, vom face un modul personalizat pentru a înțelege modul în care modelul de suprasolicitare funcționează în Magento. În acest modul particular, vom vedea cum să înlocuiți o clasă de model de categorie a modulului de bază "Catalog". Împuternicirea funcționează prin crearea unor etichete XML conform convențiilor Magento.

Presupun că sunteți familiarizat cu procesul de creare a modulului de bază în Magento. Dacă nu, iată un articol bun care explică elementele de bază ale creării modulului particularizat. Să mergem direct la cursul acestui tutorial!

O privire la configurare

Iată lista fișierelor necesare pentru configurarea dorită:

  • app / etc / module / Envato_All.xml: Este un fișier folosit pentru a permite modulul nostru personalizat.
  • app / code / local / Envato / Catalog / etc / config.xml: Este un fișier de configurare a modulului în care vom seta o suprascriere a clasei de model folosind anumite etichete conform convențiilor Magento.
  • app / code / local / Envato / Catalog / Model / Category.php: Este o clasă de model a modulului personalizat care va înlocui clasa de bază.

Crearea de fișiere și foldere: Modul personalizat

În primul rând, trebuie să creăm un fișier de activator de module. Creați un fișier "app / etc / modules / Envato_All.xml" și lipiți următorul conținut în acel fișier. Am folosit-o Envato ca spațiu de nume și modulul nostru Catalog ca numele modulului nostru. Acesta va permite modulul "Catalog" în mod implicit.

    Adevărat local   

Apoi, trebuie să creați un fișier de configurare a modulului. Creați "app / code / local / Envato / Catalog / etc / config.xml" și lipiți următorul conținut în acel fișier.

    1.0       Envato_Catalog_Model_Category     

Mai întâi, am definit un număr de versiune a modulului utilizând  etichetă. După aceea,  și etichetele sunt utilizate pentru a informa sistemul Magento suprasolicitând că vom suprascrie un "model" al modulului de bază "Catalog".

Apoi,  eticheta este folosită pentru a defini o identitate de model care va fi înlocuită de Envato_Catalog_Model_Category clasă. Este mapat la un fișier model "Category.php" din directorul "Model" al modulului Catalog. Un lucru important este că urmăm o structură de directoare similară modulului de bază. Deși acest lucru nu este absolut necesar, este mai bine decât utilizarea unei structuri de director diferite, deoarece ajută la menținerea lizibilității.

În cele din urmă, singurul lucru rămas este definirea unei clase de model Envato_Catalog_Model_Category. Să creați un fișier model "app / code / local / Envato / Catalog / Model / Category.php" și să inserați următorul conținut în acel fișier.

setStoreId ($ această-> getStoreId ()) -> addCategoryFilter ($ this); returnați colecția $; 

Am definit un Envato_Catalog_Model_Category clasa care extinde nucleul Mage_Catalog_Model_Category clasa de modele a modulului "Catalog". Astfel, puteți suprascrie fiecare metodă a clasei de bază și puteți crea noi metode dacă este necesar.

În exemplul de mai sus, getProductCollection metoda este suprascrisă, deci va fi numită în locul metodei definite în clasa modelului de bază! Puteți modifica codul modelului conform cerințelor dvs.. 

Când suprascrieți orice metodă în modele, trebuie să vă asigurați că tipul de date al valorii returnate a acelei metode se potrivește cu tipul de date al metodei de clasă de bază. Deoarece metodele de model sunt numite din mai multe module de bază, ar trebui să ne asigurăm că nu întrerupe alte caracteristici!

Deși acesta este un exemplu foarte simplu, servește scopului de a suprascrie modelul de bază și îl puteți extinde conform cerințelor dvs. personalizate.

Concluzie

În acest tutorial, am învățat cum să înlocuiți fișierele modelului de bază în Magento utilizând un modul personalizat. În următoarea și ultima parte a acestei serii imperative, vom vedea cum să suprasămerăm fișierele controlerului de bază. Nu ezitați să lăsați comentariile dvs. mai jos!

Cod