Frage

Ich habe eine statische Seite, auf der ich einen dynamischen Block nenne:

{{block type="custommodule/search" name="custommodule_search" template="custommodule/search.phtml" }}

In der Layoutdatei meines benutzerdefinierten Moduls füge ich zwei Kinder meines CustomModule_search -Blocks hinzu:

<layout>
<default module="custommodule">
    <reference name="custommodule_search">
        <block type="custommodule/search_bysize" name="search_by_size" template="custommodule/search/by-size.phtml" />
        <block type="custommodule/search_byvehicle" name="search_by_vehicle" template="custommodule/search/by-vehicle.phtml" />
    </reference>
</default>

Ich möchte nur diese beiden Blöcke nennen können:

$this->getChildHtml('search_by_size')

oder dieses:

$this->getChildHtml('search_by_vehicle')

Überall in der Vorlage des Hauptblocks.

Das Problem ist, dass sie nur angezeigt werden, wenn die Referenz nicht auf "CustomModule", sondern auf "Inhalt" bezeichnet wird, sondern auf diese Weise am Anfang des "Inhalts" -Blocks, nicht dort, wo ich möchte ....

War es hilfreich?

Lösung

Blockiert von der instanziiert {{block}} Die Richtlinie in kann nicht aus Layout -XML -Dateien verwiesen werden.

Das liegt daran, dass sie während der Verarbeitung des renderLayout() Schritt, der jedes Blöcke aufruft toHtml() Methode.

Das Layout XML wird zuvor während der Ausführung des loadLayout() Schritt.

Um dies zu umgehen, deklarieren Sie die Kinderblöcke ohne Elternblock im Layout XML

<layout>
    <default>
        <block type="custommodule/search_bysize" name="search_by_size" template="custommodule/search/by-size.phtml" />
        <block type="custommodule/search_byvehicle" name="search_by_vehicle" template="custommodule/search/by-vehicle.phtml" />
    </default>
</layout>

Dann in deinem custommodule/search Blockvorlage verwenden getBlockHtml() Anstatt von getChildHtml().

<?php echo $this->getBlockHtml('search_by_size') ?>
<?php echo $this->getBlockHtml('search_by_vehicle') ?>

Andere Tipps

In der Vorlagendatei Ihres benutzerdefinierten Blocks custommodule/search.phtml Verwenden Sie Folgendes, um die Kinderblöcke anzuzeigen und die Layoutänderung zu vermeiden:

<?php 
    echo Mage::app()->getLayout()->createBlock('custommodule/search_bysize')->setTemplate('custommodule/search/by-size.phtml')->toHtml();
    echo Mage::app()->getLayout()->createBlock('custommodule/search_byvehicle')->setTemplate('custommodule/search/by-vehicle.phtml')->toHtml();
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top