Verweisen Sie auf einen Block auf der statischen Seite
-
16-10-2019 - |
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 ....
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();
?>