it-swarm.com.de

Grundlegendes zu getChildHtml in Magento

Aus der folgenden Zeile in 2columns-right.phtml

<div class="col-main">
    <?php echo $this->getChildHtml('global_messages') ?>
    <?php echo $this->getChildHtml('content') ?>
</div>

Ich kann das nicht verstehen, woher der Inhalt von <?php echo $this->getChildHtml('content') ?> kommt.

die .phtml-Datei wird aufgerufen, um die Daten durch <?php echo $this->getChildHtml('content') ?> anzuzeigen.

59
Anup_Tripathi

Wenn wir über das Frontend der Website sprechen, über die bestimmte Zeile, nach der Sie gefragt haben ...

<?php echo $this->getChildHtml('content') ?>

wird dem Magento-XML-Layout in app/design/frontend/base/default/layout/page.xml hinzugefügt. In der Magento-Version 1.8 finden Sie die Definition in den Zeilen 92-94.

<block type="core/text_list" name="content" as="content" translate="label">
    <label>Main Content Area</label>
</block>

Anhand des Attributs "type" dieses Blocktags können wir erkennen, um welche Objektklasse es sich bei diesem Abschnitt des Layouts handelt. Es stammt aus dem "Core" -Modul und ist vom Blocktyp Textliste. Der Klassenname für diese Mage_Core_Block_Text_List. (app/code/core/Mage/Core/Block/Text/List.php). Textlisten sind einfach Blockcontainer, in denen zusätzliche untergeordnete Blöcke gespeichert werden sollen. Sie können der Textliste eine beliebige Anzahl von untergeordneten Blöcken hinzufügen, die entweder in der Reihenfolge, in der sie hinzugefügt wurden, oder in der Reihenfolge, in der sie zugewiesen wurden, ausgegeben werden.

m Ihre Frage zu beantworten, gibt es kein Ansichtsskript (.phtml-Datei), das den Inhalt von $ this-> getChildHtml ('content') wiedergibt. Die Blöcke, die waren zu diesem Block hinzugefügt, kann selbst zugeordnete Ansichtsskripte haben. Um herauszufinden, um welche Ansichtsskripte es sich handelt, müssen Sie das Layout-XML suchen, das den Block hinzugefügt hat.

Wenn ich zum Beispiel die folgende Layoutdatei zum Frontend des Themas meiner Website hinzugefügt hätte:

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="content">
            <block type="core/template" name="my_view_script" template="hello/world.phtml" />
        </reference>
    </default>
</layout>

Der obige Code würde den Block mit der Objektklasse Mage_Core_Block_Template zum Block mit dem Namen 'content' hinzufügen (was der ist, nach dem Sie gefragt haben). Magento sucht dann an den folgenden Stellen in dieser Reihenfolge nach dem Ansichtsskript:

app/design/frontend/PACKAGE_NAME/THEME_NAME/template/hello/world.phtml
app/design/frontend/PACKAGE_NAME/default/template/hello/world.phtml
app/design/frontend/base/default/template/hello/world.phtml

Das erste, das gefunden wird, ist dasjenige, das es verwenden wird. Wird kein Ansichtsskript gefunden, protokolliert Magento einen Fehler in var/logs/system.log (Standardeinstellung für Protokolldatei), der besagt, dass das Ansichtsskript nicht gefunden wurde. Es erfolgt keine Ausgabe des Blocks.

Beachten Sie, dass es abhängig von Ihren Einstellungen unter System -> Konfiguration -> (Allgemeines) Design möglicherweise zusätzliche package/theme - Speicherorte gibt, in die Magento sucht. Es gibt auch andere Szenarien, z. B. wenn das Feld "Benutzerdefiniertes Design" ausgewählt ist Für einzelne CMS-Seiten, Katalogkategorien oder Katalogprodukte geändert, verfügt die Ansichtsseite dieses einzelnen Modells möglicherweise über einen zusätzlichen Ansichtsskriptpfad (der dem ausgewählten Thema entspricht), der Vorrang vor den Standardeinstellungen Ihrer Site hat.

Magento folgt dieser Fallback-Logik, wenn es sowohl nach Übersetzungsdateien als auch nach Layout-XML-Dateien sucht.

Beachten Sie, dass es durchaus akzeptabel ist, einzelne Ansichtsskripte (vermeiden Sie das Kopieren ganzer Verzeichnisse, kopieren Sie nur die Ansichtsskripte, die Sie tatsächlich ändern möchten) von app/design/frontend/base/default/template/ In Ihr lokales Design zu kopieren und für Ihre Zwecke anzupassen Thema der Website. Um jedoch eine aktualisierungskompatible Site zu erhalten, sollten Layoutdateien nicht von der Basis in Ihr lokales Design kopiert werden. Befolgen Sie dabei nicht die Upgrade-kompatiblen Vorgehensweisen. Stattdessen sollten XML-Layout-Updates für Ihr Design in app/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xml Enthalten sein. Es gibt keine Layoutanweisungen von app/design/frontend/base/default/layout/*, Die nicht mit den richtigen XML-Anweisungen in local.xml entfernt/hinzugefügt/geändert werden können.

150
Darren Felton