Wie füge ich auf jeder Seite einen Block am Ende von ‚content‘ hinzu?

Eigentlich wollte ich mir heute einen Magento-freien Vormittag machen. Dann aber stolperte ich zufällig über eine Frage auf Stack Overflow, die mir so oder in ähnlicher Form immer wieder einmal gestellt wird:

Magento: einen Inhalts-Block am Ende des Struktur-Blocks „content“ einfügen

Ich versuche einen Inhalts-Block in Magento hinzuzufügen, der auf jeder Seite unterhalb des Hauptinhalts sichtbar ist. Ich möchte dies mit einer eigenen Extension umsetzen, damit ich diese Extension kopieren kann und keine Core-Design-Dateien angepasst werden müssen.

(Amk: Übersetzung der Frage auf Stack Overflow)

Das klingt erst einmal einfach, funktioniert allerdings etwas anders, als man zuerst denkt. Meine Original-Antwort zur Frage finden Sie hier (zum Beispiel, falls Sie meine Antwort positiv bewerten wollen ;-)). Wenn Sie die Umsetzung übernehmen, denken Sie bitte daran, dass Sie selbst noch ein wenig Code hinzufügen müssen (das Extension-Basisgerüst erstellen, die Dateinamen und Ähnliches entsprechend anpassen etc.).

1. Wenn Sie den Block wirklich auf allen Shop-Seiten einfügen möchten

Fügen Sie in Ihrer XML-Layout-Datei (local.xml oder eine eigens erstellte) ein neues Layout-Handle hinzu:

Dann erstellen Sie einen Event-Observer, der dafür sorgt, dass das Layout-Handle bei der Erstellung der Seite berücksichtigt wird:

Jetzt müssen Sie noch die XML-Extension-Konfigurationsdatei (config.xml) anpassen und den Event-Observer registrieren.

Der Block wird nun unterhalb der anderen Blöcke angezeigt. Ich habe das erfolgreich für die Startseite, die Login-Seite und die Kategorieseite getestet. Es sollte auch auf den anderen Seiten funktionieren.

Falls Sie den Block doch auf einigen wenigen Seiten ausnehmen möchten, können Sie im Event-Observer überprüfen, ob das Layout-Handle auf der aufgerufenen Seite verwendet werden soll.

Falls Sie den Block nur auf einigen Seiten einbinden möchten

Wie oben beschrieben fügen Sie ein Layout-Handle in ihrer XML-Layout-Datei hinzu, doch anstatt einen Event-Observer zu erstellen und zu registrieren, teilen Sie direkt in Ihrer XML-Layout-Datei mit, in welchen Bereichen das Layout-Handle zur Anwendung kommt.

3 Antworten

  1. Andi sagt:

    Hallo, warum hast du in der local.xml nicht einfach das „default“-Layouthandle angesprochen, um den Block auf jeder Seite einzufügen?

    • Hallo, weil der Block dadurch nicht am Ende des Content-Bereichs angezeigt wird (siehe die ursprüngliche Frage auf Stack Overflow und die Kommentare dazu).