magento
Module structuur
Zoeken…
Opmerkingen
Modules bestaan om uit te breiden. U kunt the app/code/
bestanden niet wijzigen zonder toekomstige updates te verbieden. In plaats daarvan voegen we een module toe aan de app/code/local
map (de lokale map kan ontbreken, zo ja, deze moet handmatig worden gemaakt. Dit is gebruikelijk in latere versies van Magento) voor extra aangepaste lokale functionaliteit.
Alle configuratiebestanden van de module beginnen met een tag <config>
. De nieuwe module wordt gedeclareerd in de tag <modules>
. We zullen een module met de naam YOUR_COMPANY_HelloWorld aanroepen, daarom worden de tags <YOUR_COMPANY_HelloWorld>
gebruikt. Hier definiëren we de versie (allereerste = 0.0.1)
Een lijst met XML-evenementen is te vinden op: http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/module_config.xml
Als je problemen ondervindt, kijk dan op: http://coding.smashingmagazine.com/2012/11/30/introducing-magento-layout/
Een geheel nieuwe module maken (Hello World)
Magento aangepaste module-ontwikkeling is een kernonderdeel van elke Magento-ontwikkeling of Magento-project, omdat u in elk stadium uw eigen functionaliteit / module wilt integreren in uw bestaande Magento-project.
Het eerste dat ontwikkelaars moeten uitschakelen, is de systeemcache. Anders wordt ontwikkelen lastig omdat bij elke verandering een flush nodig is. Vanuit het magento-beheerpaneel: ga naar System > Cache Management > Select All > Actions : Disable.
Gebruik de volgende gids om een nieuwe module te maken:
Maak een map in
app/code/local/
- naamgevingsconventies nemen meestal de naam van uw bedrijf, bijvoorbeeldapp/code/local/<YOUR_COMPANY>
.Nu hebben we een aangepaste locatie voor onze modules. Maak een andere map aan, noem deze iets gerelateerd aan het type module dat u wilt maken, bijvoorbeeld app / code / local / <YOUR_COMPANY> / HelloWorld / - "HelloWorld" is wat ik deze module zal noemen.
Deze map heeft een
config.xml
dus Magento herkent het als een nieuwe module. Maak een andere map met de naametc
. Gevolgd door een xml-bestand met de naam config.xml. De map moet eruitzien alsapp/code/local/<YOUR_COMPANY/HelloWorld/etc/config.xml
Dit is de structuur van het xml-bestand:<?xml version="1.0" encoding="UTF-8" ?> <config> <modules> <YOUR_COMPANY_HelloWorld> <version>0.0.1</version> </YOUR_COMPANY_HelloWorld> </modules> </config>
Vervolgens moeten modules worden gedeclareerd bij Magento. Ga door naar
app/etc/modules
. Maak nog een XML-document en geef het de gekozen namen van uw tags:YOUR_COMPANY_HelloWorld
in mijn geval. In dit document schrijf:<?xml version="1.0" encoding="UTF-8"?> <config> <modules> <YOUR_COMPANY_HelloWorld> <!-- Whether our module is active: true or false --> <active>true</active> <!-- Which code pool to use: core, community or local --> <codePool>local</codePool> </YOUR_COMPANY_HelloWorld> </modules> </config>
Opnieuw worden configuratie- en moduletags gebruikt om een nieuwe module aan Magento te declareren. Actief is de standaardwaarde die toegankelijk is in het
Admin Panel under System > Configuration > Advanced
.codePool
vertelt Magento welke directory te kijken in.local
in ons gevalDeze module is nu opgezet, dus het model van onze MVC-structuur. u zou uw nieuwe module moeten kunnen zien in het beheerdersdashboard onder
System > Configuration > Advanced
. Het doet echter nog niets! U moet teruggaan naar ons bestand config.xml en XML-elementen definiëren.Aansluitend op de tutorial; We zullen enkele van deze XML-elementen gebruiken om klassen te maken en alle pagina's aan de voorkant van onze site te manipuleren. Terug naar het bestand
config.xml
schrijf het volgende onder de tag</modules>
:<global> <!-- adding a new block definition --> <blocks> <!-- A unique short name for our block files --> <helloworld> <!-- the location of our modules block --> <class>YOUR_COMPANY_HelloWorld_Block</class> </helloworld> </blocks> </global> <!-- We are making changes to the frontend --> <frontend> <!-- We are making changes to the layout of the front end --> <layout> <!-- we are adding a new update file --> <updates> <!-- Creating the name of our update and linking it the module --> <helloworld module="YOUR_COMPANY_HelloWorld"> <!-- The name of the layout file we are adding --> <file>helloworld.xml</file> </helloworld> </updates> </layout> </frontend>
Zoals u kunt zien, breiden we constant kernbestanden uit in plaats van ze te manipuleren. De tag
helloworld
is in kleine letters, omdat dat naar een handle verwijst, en voor de continuïteit zullen we deze zo dicht mogelijk noemen. We koppelen dit vervolgens aan de moduleYOUR_COMPANY_HelloWorld
.We veranderen de lay-out. Daarom moeten we deze handle in de layoutmap maken. ga door naar
app/design/frontend/base/default/layout
. We hebben de module laten zoeken naar het bestandhelloworld.xml
. Daarom moeten we het in deze map maken. Waar wacht je op. Doe het!! en vul het in met:<?xml version="1.0" encoding="UTF-8"?> <!-- All Layout files begin with this code --> <layout> <!-- this is the layout handle. Default is handled on all pages. We want this module to execute on all pages --> <default> <!-- This is the block we want to bolt onto the existing before_body_end block --> <reference name="before_body_end"> <!-- We define our new block and template to be added to before_body_end --> <block name="helloworld_footer" template="helloworld/footer.phtml" type="helloworld/footer"/> </reference> </default> </layout>
Nu kunnen degenen onder u die een beetje Magento-ervaring hebben of nog meer opmerkelijke Magento-tutorials hebben gelezen, snakken naar het feit dat we wijzigingen aanbrengen in base / default, omdat dit is waar de Magento-kernbestanden zich bevinden. We wijzigen hier echter geen bestanden, we maken nieuwe en bovendien voegen we onze bestandsnaam toe aan "helloworld", dus er is weinig kans dat dit conflicteert met andere modules of problemen veroorzaakt met het upgraden van Magento in de toekomst. Gelukkige dagen!
Omdat we alle pagina's willen beïnvloeden, gebruiken we de standaardtag en verwijzen we naar het structuurblok
before_body_end
. Dit zal de rol van de actie vervullen en de sectie View van onze MVC-structuur activeren.Nu begrijpen we dat we
before_body_end
naar hetbefore_body_end
blok. en deze koppelen aan ons aangepaste blok. Dit wordt een referentie genoemd en is een haak . We houden het momenteel niet vast aan iets dat bestaat, daarom moeten we de nodige bestanden maken.In
helloworld.xml
hebben we in sjabloon eenfooter.phtml
. Ga naarapp/design/frontend/base/default/template
en maak een directory-helloworld
.Maak in deze map het
footer.phtml
bestand en vul dit in met HTML, deze tutorial schrijft dit eenvoudig om een aantal PHP-functionaliteit weer te geven die is gekoppeld aan ons PHTML-bestand:<p>Hello Everyone! Todays date is <?php echo $this->getDate() ?></p>
We moeten nu ons eigen blokobject maken om de sjabloon aan onze blokfunctionaliteit te koppelen. Maak de directory-app / code / local / YOUR_COMPANY / HelloWorld / Block / aan en maak
Footer.php
het bestandFooter.php
. Hiernaar werd verwezen in onze zeta_layout.xml van het type "helloworld / footer". Vul dit bestand in met:<?php class YOUR_COMPANY_HelloWorld_Block_Footer extends Mage_Core_Block_Template { public function getDate() { $date = date('Y-m-d'); return urlencode($date); } } ?>
Dit is de functionaliteit die onze aanroep
getDate()
zal vullen die we vanuit ons.phtml
bestand hebben aangeroepen. We breiden deMage_Core_Block_Template
.Deze functionaliteit is nu voltooid. Test dit door naar uw startpagina te gaan waar u uw module in de voettekst van elke pagina zou moeten zien!