Begrijp Overschrijven in Magento modellen

In deze serie verkennen we de overheersende functies die beschikbaar zijn in het Magento eCommerce-systeem. In het vorige artikel hebben we besproken hoe kernblokbestanden kunnen worden genegeerd met behulp van een aangepaste module. Vandaag zal ik het uitbreiden en demonstreren hoe u kernmodelbestanden kunt overschrijven met behulp van een XML-gebaseerd configuratiebestand.

Waarom modellen negeren?

In Magento spelen modellen een belangrijke rol omdat ze de meeste bedrijfslogica van de kernfuncties implementeren. Er zijn tijden dat u de stroom of bedrijfslogica in modellen moet wijzigen om uw aangepaste functies te implementeren. 

Het is verleidelijk om door te gaan en de kernbestanden rechtstreeks te wijzigen, wat een eenvoudige en eenvoudige oplossing lijkt. Dat gezegd hebbende, het is een slechte gewoonte, omdat het het upgraden van Magento erg moeilijk maakt. Hoe meer kernbestanden u direct aanpast, hoe moeilijker het voor u wordt om uw wijzigingen bij te houden en toe te passen tijdens elke versie-upgrade!

In deze zelfstudie maken we een aangepaste module om te begrijpen hoe modeloverschrijvingen in Magento werken. In deze aangepaste module zullen we zien hoe een categoriemodelklasse van de kerncatalogus "Catalog" kan worden vervangen. Het negeren van werken door het instellen van bepaalde XML-tags volgens de conventies van Magento.

Ik neem aan dat je bekend bent met het maken van basismodules in Magento. Zo niet, dan is hier een goed artikel over de basisprincipes van het maken van aangepaste modules. Laten we meteen doorgaan met de cursus van deze tutorial!

Een blik op de installatie

Hier is de lijst met bestanden die nodig zijn voor de gewenste setup:

  • app / etc / modules / Envato_All.xml: Het is een bestand dat wordt gebruikt om onze aangepaste module in te schakelen.
  • app / code / local / Envato / Catalogus / etc / config.xml: Het is een moduleconfiguratiebestand waarin we modelklasse instellen die met behulp van bepaalde tags wordt vervangen volgens de Magento-conventies.
  • app / code / local / Envato / Catalogus / Model / Category.php: Het is een modellenserie van onze aangepaste module die de basismodelklasse zal overschrijven.

Bestanden en mappen maken: Aangepaste module

Eerst moeten we een module-enabler-bestand maken. Maak een bestand "app / etc / modules / Envato_All.xml" en plak de volgende inhoud in dat bestand. We hebben gebruikt Envato als onze modulenaamruimte en Catalogus als onze modulenaam. Hiermee wordt onze module 'Catalogus' standaard ingeschakeld.

    waar lokaal   

Vervolgens moeten we een moduleconfiguratiebestand maken. Maak "app / code / local / Envato / Catalog / etc / config.xml" en plak de volgende inhoud in dat bestand.

    1.0       Envato_Catalog_Model_Category     

Ten eerste hebben we een versienummer van de module gedefinieerd met behulp van de  label. Daarna, de  en tags worden gebruikt om het Magento-besturingssysteem te laten weten dat we een "model" van de kernmodule "Catalogus" zullen negeren.

Vervolgens de  tag wordt gebruikt om een ​​modelidentiteit te definiëren die zal worden opgeheven door de Envato_Catalog_Model_Category klasse. Het is toegewezen aan een modelbestand "Category.php" onder de map "Model" van de catalogusmodule. Een belangrijk ding om op te merken is dat we een directorystructuur volgen die vergelijkbaar is met de kernmodule. Hoewel dat niet strikt noodzakelijk is, is het beter dan een andere directorystructuur te gebruiken, omdat het helpt om de leesbaarheid te behouden.

Ten slotte is het enige overgebleven ding om een ​​modelklasse te definiëren Envato_Catalog_Model_Category. Laten we een modelbestand maken "app / code / local / Envato / Catalog / Model / Category.php" en de volgende inhoud in dat bestand plakken.

setStoreId ($ this-> getStoreId ()) -> addCategoryFilter ($ this); return $ collectie; 

We hebben een gedefinieerd Envato_Catalog_Model_Category klasse die de kern verlengt Mage_Catalog_Model_Category modelklasse van de module "Catalogus". U kunt dus elke methode van de basisklasse overschrijven en indien nodig nieuwe methoden maken.

In het bovenstaande voorbeeld, de getProductCollection methode wordt overschreven, zodat deze wordt aangeroepen in plaats van de methode die is gedefinieerd in de kernmodelklasse! U kunt de modelcode aanpassen volgens uw vereisten. 

Wanneer u methoden in modellen overschrijft, moet u ervoor zorgen dat het gegevenstype van de geretourneerde waarde van die methode overeenkomt met het gegevenstype van de methode van de basisklasse. Omdat modelmethoden worden aangeroepen vanuit verschillende kernmodules, moeten we ervoor zorgen dat deze geen andere functies doorbreekt!

Hoewel dit een zeer eenvoudig voorbeeld is, dient het om het kernmodel te vervangen en kunt u het uitbreiden volgens uw aangepaste vereisten..

Conclusie

In deze zelfstudie hebben we geleerd om kernmodelbestanden in Magento te vervangen door een aangepaste module. In het volgende en laatste deel van deze overheersende serie, zullen we zien hoe u de kernbesturingsbestanden kunt overschrijven. Aarzel niet om uw opmerkingen hieronder te laten!