Soms zijn de beschikbare producttypen gewoon niet genoeg. Magento heeft de verschillende soorten behoorlijk goed behandeld, maar er zijn gewoon situaties waarin het gewoon logischer is om een apart producttype te hebben.
Voor mij was een van die situaties het moment waarop ik een aangepaste productmodule moest maken die zou kunnen omgaan met het genereren van een aangepaste PDF op basis van de opties van het gekochte product.
Bovendien is dit geen oplossing als u een product met een specifiek kenmerk moet maken, omdat Magento deze functies al biedt. In plaats daarvan moet u deze handleiding vinden voor wanneer (of als) u een bepaald type product ergens in het systeem moet kunnen identificeren.
Bijvoorbeeld, als je waarnemers erin haakt.
Deze gids gaat ervan uit dat je enige basiskennis hebt van de innerlijke werking van een Magento-module. Het bouwen van een goede module is een beetje een kunst op zichzelf en het is het onderwerp van een geheel eigen post. Met dat gezegd, gaan we kijken hoe we de module ervoor kunnen instellen.
Nu, op het belangrijkste punt van discussie.
Zoals alles in Magento, begint ons werk hier ook in de configuratiebestanden. We willen hiervoor een aparte module creëren omdat we in Magento voor alles aparte modules willen. Door dingen gescheiden en modulair te houden in Magento houden we ons gelukkig. Ik eindigde met Robogento Printable, Robogento was mijn bedrijf en Printable de naam van de module.
Om een producttype toe te voegen, moeten we Magento erover vertellen en het definiëren. Dit zijn de toepasselijke delen van de config.xml
bestand dat we nodig zullen hebben, je moet natuurlijk zelf de lege plekken invullen, natuurlijk:
... ... ... afdrukbare / product_type afdrukbare / PRODUCT_PRICE 1
Daar gaan we.
Zoals u kunt zien, is mijn module gedefinieerd als "printbaar", het label is voor het voordeel van filteren in de rasters die het product in de backend tonen en bij het maken van een nieuw product. Het model en het prijsmodel zijn waar het plezier begint. Elk product heeft een type nodig, dit kan vrij eenvoudig zijn.
Breid het basissysteem uit door het Type-model te maken. Bekijk het bestandspad op basis van de klassedefinitie:
class Robogento_Printable_Model_Product_Type verlengt Mage_Catalog_Model_Product_Type_Simple
En daar gaan we.
Plots is ons afdrukbare product nu een kloon van het Simple Product waar Magento zich van bewust is. Wat hier eigenlijk gebeurt, is dat we door het uitbreiden van het eenvoudige type alle functies van het producttype opnieuw gebruiken. Het toegevoegde voordeel is dat we heel eenvoudig de bestaande functies kunnen vervangen door onze eigen functies als we zo geneigd zijn.
Er was nog iets dat ik je liet zien voor ons config.xml
het dossier. Het prijsmodel van het producttype. Hetzelfde geldt hier:
class Robogento_Printable_Model_Product_Price verlengt Mage_Catalog_Model_Product_Type_Price
Zoals je ziet, breiden we ons simpelweg opnieuw uit vanuit Magento's bestaande systeem. Magento heeft genoeg tekortkomingen, maar de eenvoudige en virtuele productsoorten behoorden tot de beter doordachte delen ervan en het is altijd een goed idee om bestaande code opnieuw te gebruiken wanneer je kunt.
Normaal gesproken zou ik zeggen dat er meer is, maar in het geval van Magento is dit echt alles wat er is. We hebben nu in wezen een alias van het Simple Product-systeem gemaakt en het Printable genoemd.
Het afdrukbare product zal alle functies en definities gebruiken zoals ze zijn ingesteld voor de eenvoudige producten. Dus twee adressen, inventarisinstellingen, noem maar op. Als u alleen een factuuradres nodig heeft, breidt u het uit van het virtuele product. Als u downloadbare producten wilt aanbieden, maar met een iets andere reeks functies, breidt u deze uit vanaf het downloadbare systeem.
Zoals ik aan het begin al zei, dit is niet om een T-shirt te maken in je nieuwe Magento-winkel. In dat geval bent u waarschijnlijk op zoek naar de attribute sets in de backend.
Hiermee kunt u snel specifieke producten filteren, zowel in de backend als bij andere Magento-functies zoals waarnemers of verzamelingen.