von Vinai Kopp, 14.10.2009

Eine Einführung in Magentos Layout-XML: Magento-Layouts im Griff

Aus dem
t3n Magazin Nr. 18

Jetzt kaufen

Aufbau von Layout-Dateien

Dieser Artikel setzt einfache XML-Grundkenntnisse voraus [2]. Die meisten Module in (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.

Seite:  1 2 3 4

Empfohlene Artikel

4 Antworten

  1. 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 [...]

  2. von mathiasschopmans 09.03.2010 (16:16Uhr) 2.

    Super! Endlich mal ein guter Einstieg. ;)

  3. 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 ;-)

  4. von TB 10.05.2010 (09:41Uhr) 4.

    Das beste Tutorial das ich bis jetzt im Netz gefunden habe *daumen hoch*

Deine Meinung


(wird nicht veröffentlicht)