Aufbau von Layout-Dateien
Dieser Artikel setzt einfache XML-Grundkenntnisse voraus [2]. Die meisten Module in Magento (sowohl Core-Module als auch aus der Community) bringen eigene Layout-XML-Dateien mit. Diese finden Sie in „app/design/frontend/default/default/THEME/layout/“. Magento liest diese Dateien ein und baut aus den Elementen eine große Gesamtstruktur zusammen. Zur Verdeutlichung ein paar Auszüge aus dem XML:
Auszug aus layout/page.xml
<?xml version="1.0"?> <layout version="0.1.0"> <default> <block type="page/html" name="root" template="page/3columns.phtml"> <block type="core/text_list" name="content" as="content"/> </block> </default> </layout>
Listing 4
Es wird ein Block namens „root“ definiert, der einen weiteren Block namens „content“ enthält. Jedem Block wird ein Name zugewiesen. „content“ ist ein Child-Block vom „root“-Block.
Auszug aus layout/customer.xml
<?xml version="1.0"?> <layout version="0.1.0"> <customer_account_index> <reference name="content"> <block type="customer/account_dashboard" name="customer_account_dashboard" template="customer/account/dashboard.phtml"> </block> </reference> </customer_account_index> </layout>
Listing 5
Das „<reference name="content">“ in Listing 5 bezieht sich auf „<block name="content"/>“ aus der Datei „page.xml“. Das heißt der Inhalt des <reference>-Elements wird in den „content“-Block eingefügt.
Auszug aus layout/sales.xml
<?xml version="1.0"?> <layout version="0.1.0"> <customer_account_index> <reference name="customer_account_dashboard"> <block type="sales/order_recent" name="customer_account_dashboard_top" as="top" template="sales/order/recent.phtml"/> </reference> </customer_account_index> </layout>
Listing 6
Hier wiederum wird der Block „customer_account_dashboard“ erweitert. Nach dem Zusammenfügen des XML aus den Beispielen ergibt sich folgende Struktur:
Zusammengefügte Datenstruktur
<block type="page/html" name="root" template="page/3columns.phtml"> <block type="core/text_list" name="content" as="content"> <block type="customer/account_dashboard" name="customer_account_dashboard" template="customer/account/dashboard.phtml"> <block type="sales/order_recent" name="customer_account_dashboard_top" as="top" template="sales/order/recent.phtml"/> </block> </block> </block>
Listing 7
Die „name“- und „as“-Attribute sind nicht selbsterklärend. Das „name“-Attribut wird benutzt, um innerhalb vom Layout-XML auf einen Block Bezug zu nehmen (etwa <reference name=“customer_account_dashboard_top“>), beim „as“-Attribut verwendet Magento hingegen Template-Dateien, zum Beispiel bei der Ausgabe von Child-Blöcken (<?php echo $this->getChildHtml('top'); ?>). Allerdings soll nicht auf jeder Seite jeder Block angezeigt werden. Dazu gibt es die XML-Elemente erster Ebene, in den Beispielen <default> und <customer_account_index>. Sie werden „Layout Update Handles“ genannt. Diese Handles bestimmen, welche Layout-Updates in die Gesamtstruktur am Ende aufgenommen werden. Das <default>-Handle wird auf jeder Seite angewendet. Alle anderen Layout-Update-Handles werden nur unter bestimmten Umständen ausgewertet.
Die Handles haben in Magento die Form „modul_controller_action“. Wird der Warenkorb (die Index-Aktion im Cart-Controller des Checkout-Moduls) mit der URL http://www.example.com/checkout/cart/ aufgerufen, werden die Layout-Updates in <default> und <checkout_cart_index> in der Datenstruktur zusammengefasst. Wenn der Kunde eingeloggt ist, wird zusätzlich <customer_logged_in> ausgewertet, ansonsten das Update-Handle <customer_logged_out>. Alle XML-Blöcke aus diesen Update-Handles werden eingelesen, egal in welcher Layout-XML-Datei sie stehen. Das bedeutet, dass Entwickler sich in einer eigenen Layout-XML-Datei auf bereits bestehende Strukturen beziehen und auf sie Einfluss nehmen können.
Sie müssen nicht unbedingt eine eigene Layout-Datei benutzen – dazu müssten Sie erst ein neues Magento-Modul erstellen. Stattdessen können Sie auch einfach eine Layout-XML-Datei eines beliebigen existierenden Moduls in das Theme kopieren und dort anpassen.







4 Antworten
von Tutorial: Einführung in Magentos Layout… 08.03.2010 (09:01Uhr) 1.
[...] 18 vermittelt das Grundwissen, um Layout-Updates in eigenen Magento-Projekten umsetzen zu können. Er steht jetzt kostenlos im Heftarchiv zur Verfügung. Zudem kann man t3n Nr. 18 versandkostenfrei in unserem Shop bestellen.Ads_BA_AD('CAD2'); magento [...]
von mathiasschopmans 09.03.2010 (16:16Uhr) 2.
Super! Endlich mal ein guter Einstieg. ;)
von Till Heß 09.03.2010 (20:33Uhr) 3.
Super Artikel! Hätte es den doch gegeben als ich das erste mal die xml Datein von Magento angepasst habe ;-)
von TB 10.05.2010 (09:41Uhr) 4.
Das beste Tutorial das ich bis jetzt im Netz gefunden habe *daumen hoch*