在我正在编写的模块中,我希望使用mymodule.xml在此块之后插入我自己的块:
<block type="catalog/product_view_media" name="product.info.media" as="media" template="catalog/product/view/media.phtml"/>
嵌套在
中<reference name="content">
<block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
可以在app / design / frontend / base / default / layout / catalog.xml中看到
我尝试了很多变体,例如:
<reference name="content">
<reference name="product.info">
<block type="mymodule/folder_class" after="media" name="mymodule.folder.class" template="mymodule/folder/class.phtml" as="mymodule_folder_class"></block>
</reference>
</reference>
只是
<reference name="product.info">
<block type="mymodule/folder_class" after="media" name="mymodule.folder.class" template="mymodule/folder/class.phtml" as="mymodule_folder_class"></block>
</reference>
和
<reference name="product.info">
<block type="mymodule/folder_class" after="media" name="mymodule.folder.class" template="mymodule/folder/class.phtml" as="mymodule_folder_class"></block>
</reference>
但我似乎无法找到正确的组合。 渲染我块的唯一一个是:
<reference name="content">
<block type="mymodule/folder_class" after="media" name="mymodule.folder.class" template="mymodule/folder/class.phtml" as="mymodule_folder_class"></block>
</reference>
但很明显它并没有放在我希望放置的地方。
答案 0 :(得分:18)
如果您查看page.xml
中内容阻止的声明,您会看到以下内容。
<block type="core/text_list" name="content" as="content" translate="label">
默认情况下,名为content的块为core/text_list
,转换为Mage_Core_Block_Text_List
。
core/text_list
块的目的很简单。他们自动渲染插入其中的任何块。这就是为什么你可以成功地将一个块插入内容。
阻止阻止>>进入
<block type="catalog/product_view" name="product.info" template="mymodule/folder/class.phtml" ...
是catalog/product_view
,转换为 Mage_Catalog_Block_Product_View
,最终继承自Mage_Core_Block_Template
。这使它成为一个模板块。模板块不会自动呈现他们的孩子。模板块将呈现phtml
文件。如果phtml
包含对
$this->getChildHtml('block_name');
然后将呈现具有该特定名称的块。如果phtml
文件包含对
$this->getChildHtml(); //no arguments
然后然后全部将呈现子块。
所以,当你说
时<reference name="product.info">
<block type="mymodule/folder_class" after="media" name="mymodule.folder.class" template="mymodule/folder/class.phtml" as="mymodule_folder_class"></block>
</reference>
您在mymodule/folder_class
块中插入 product.info
类型的块。但是,因为product.info
是模板块而不是文本列表块,所以它不会渲染您插入的块。您需要在主题中添加自定义catalog/product/view.phtml
模板(通过复制基本模板),然后在view.phtml
的底部添加
<?php echo $this->getChildHtml('mymodule.folder.class');?>
答案 1 :(得分:0)
如果您想在catalog/product/view action
中添加该块,我相信您应该这样做,否则将catalog_product_view
替换为所需的操作,或default
替换任何操作。
<layout version="0.1.0">
<catalog_product_view>
<reference name="content">
<block type="mymodule/folder_class" after="media" name="mymodule.folder.class" template="mymodule/folder/class.phtml" as="mymodule_folder_class">
</block>
</reference>
</catalog_product_view>
</layout>