it-swarm.com.de

Wo ist der Inhalt von <? Php echo $ this-> getChildHtml ("right")?>

Ich versuche, meine rechte Seitenleiste neu zu organisieren. In der Vorlage (2 Spalten nach rechts) wird Folgendes aufgerufen: 

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

Wo finde ich den Inhalt dieser Variablen? 

9
Urvisha

Ein Aufruf der Methode getChildHtml() lädt den HTML-Code für den untergeordneten Block mit dem Namen, der an die Methode übergeben wird. In diesem Fall suchen wir nach einem untergeordneten Block mit dem Namen right .

Um herauszufinden, wo dieser untergeordnete Block zu finden ist, müssen wir wissen, welcher Block diese Methode aufruft. Ich weiß, dass dieser bestimmte Aufruf der getChildHtml()-Methode in der Spaltenvorlage der Hauptseite angezeigt wird, da right eine der Spalten ist. Schauen Sie sich also die page.xml-Layoutdatei an und suchen Sie nach der Vorlagendatei, in der Sie den Methodenaufruf gefunden haben. Sie werden etwa Folgendes finden:

<reference name="root">
    <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
    <!-- Mark root page block that template is applied -->
    <action method="setIsHandle"><applied>1</applied></action>
</reference>

Durch Verwendung des <reference>-Tags in einer Layoutdatei können Sie den Zielblock ändern. Mit dem <action>-Tag können Sie eine Blockmethode innerhalb des Blocks ausführen, mit dem Sie arbeiten. In diesem Layoutabschnitt wird also die Vorlage innerhalb des Blocks root festgelegt. Aus diesem Grund wissen wir, dass es sich um den root - Block handelt, der die getChildHtml() - Methode aufruft.

Als Nächstes sehen wir uns an, wo der Block root im Layout definiert ist. Er befindet sich in derselben page.xml-Layoutdatei und sollte sich ganz oben befinden:

<block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
    ...
    <block type="core/text_list" name="right" as="right" translate="label">
        <label>Right Column</label>
    </block>
    ...
</block>

In diesem Block ist ziemlich viel definiert, aber Sie können sehen, dass er den Namen root erhält und einige untergeordnete Blöcke definiert. Einer dieser untergeordneten Blöcke heißt right und es ist dieser Block, dessen HTML-Code von der getChildHtml()-Methode ausgegeben wird. Beachten Sie unbedingt den Blocktyp - core/text_list. Dies ist ein spezieller Blocktyp, dh, wenn der HTML-Code für diesen Block mit der getChildHtml()-Methode ausgegeben wird, werden auch untergeordnete Blöcke gerendert. Wenn der Blocktyp wie beim Root-Block page/html war, würde jeder untergeordnete Block, der zum Block right hinzugefügt wurde, einen eigenen Aufruf der getChildHtml()-Methode benötigen. Bei diesem Blocktyp benötigen Sie nur einen Aufruf von getChildHtml('right') und allen untergeordneten Blöcken wird auch gerendert.

Wie Sie sehen, ist der Block right hier definiert, aber leer. Dies ist so, weil auf dieselbe Weise wie bei dem Tag, das auf den Stammblock (<reference name="root">) verweist, andere Layoutdateien durch Hinzufügen des Blocks right untergeordnete Blöcke zum Block right hinzufügen.

<reference name="right">
    ...
</reference>

Um Ihre Frage abschließend zu beantworten (und hoffentlich ein wenig auf dem Weg dahin zu informieren), müssen Sie in anderen Layoutdateien als page.xml nach Verweisen auf den Block right suchen. Hier finden Sie den gesamten untergeordneten Inhalt Ausgabe durch den Methodenaufruf getChildHtml().

Sie können ändern, was zum Block right in Ihrer eigenen Modullayoutdatei hinzugefügt wird, oder local.xml-Layoutdatei, wenn Sie kein Modul erstellen. Ich beschreibe die local.xml-Layoutdatei kurz in meiner Antwort hier mit einer Beispielsyntax, um neue Blöcke hinzuzufügen und Blöcke zu entfernen, die in anderen Layoutdateien hinzugefügt wurden.

22
Jonathan Hussey

Sie finden in Ihrer Datei layout.xml, woher alles kommt. Es hätte Listenblöcke, unter denen die .phtml-Dateien und Daten von dort stammen. Ich hoffe, Sie verstehen, was ich zu vermitteln versuche.

1
Chiragit007
<reference name="right">  
    <block type="yourmodule/yourblock" name="yourblock" as="yourblock" />
 </reference>

Sie können dort Ihre eigenen Blöcke hinzufügen.

0
Chiragit007