在我写的模块中,我想使用mymodule.xml在这个块之后插入我自己的块:
<block type="catalog/product_view_media" name="product.info.media" as="media" template="catalog/product/view/media.phtml"/>
Run Code Online (Sandbox Code Playgroud)
嵌套在里面
<reference name="content">
<block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
Run Code Online (Sandbox Code Playgroud)
可以在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>
Run Code Online (Sandbox Code Playgroud)
只是
<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>
Run Code Online (Sandbox Code Playgroud)
和
<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>
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到正确的组合.渲染我块的唯一一个是:
<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>
Run Code Online (Sandbox Code Playgroud)
但显然它不是放在我希望放置的地方.
Ala*_*orm 18
如果您查看内容块的声明page.xml,您将看到以下内容.
<block type="core/text_list" name="content" as="content" translate="label">
Run Code Online (Sandbox Code Playgroud)
默认情况下,名为content的块是a core/text_list,转换为a Mage_Core_Block_Text_List.
core/text_list块的目的很简单.它们会自动渲染插入其中的任何块.这就是为什么你可以成功地将一个块插入内容.
要插入的块
<block type="catalog/product_view" name="product.info" template="mymodule/folder/class.phtml" ...
Run Code Online (Sandbox Code Playgroud)
是一个catalog/product_view,转换为a Mage_Catalog_Block_Product_View,最终继承自Mage_Core_Block_Template.这使它成为一个模板块.模板块不会自动呈现其子项.模板块将呈现phtml文件.如果phtml包含调用
$this->getChildHtml('block_name');
Run Code Online (Sandbox Code Playgroud)
然后将呈现具有该特定名称的块.如果phtml文件包含调用
$this->getChildHtml(); //no arguments
Run Code Online (Sandbox Code Playgroud)
然后将呈现所有子块.
所以,当你说的时候
<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>
Run Code Online (Sandbox Code Playgroud)
你正在块中插入一个类型mymodule/folder_class的product.info块.但是,因为product.info是模板块而不是文本列表块,所以它不会渲染您插入的块.您需要为catalog/product/view.phtml主题添加自定义模板(通过复制基本模板),然后在底部view.phtml添加
<?php echo $this->getChildHtml('mymodule.folder.class');?>
Run Code Online (Sandbox Code Playgroud)