在Magento的布局xml中设置块模板时遇到问题.我正在尝试设置子块的模板,而不是整个页面布局(几乎所有文档都解释了如何设置布局的模板).
背景:我正在使用模块布局xml中的标签更新自定义操作中的布局句柄<update />.
本质上,我想重用内置产品视图操作的布局和块,但为几个块提供自定义模板.(不仅仅是覆盖,这些都需要是全新的模板,只能在我的自定义操作中触发,并且可以覆盖).
我的布局html:
<?xml version="1.0"?>
<layout version="0.1.0">
<mymodule_product_index>
<update handle="catalog_product_view" />
<reference name="content">
<block type="catalog/product_view"
name="product.info" output="toHtml" template="mymodule/product.phtml" />
</reference>
<reference name="product.info.bundle">
<action method="setTemplate"><template>mymodule/customtemplate.phtml</template></action>
</reference>
</mymodule_product_index>
</layout>
Run Code Online (Sandbox Code Playgroud)
在setTemplate上product.info.bundle永远不会奏效; 它根本不会影响布局.我已经尝试从父块中包装<reference>其他<reference>节点而不起作用.是否可以用这种方式替换块模板?我觉得我的问题源于我正在使用的事实<update />.
顺便说一句,我知道我的布局xml正在加载并且没有错误,文件的其余部分工作正常,缓存被禁用,无论如何都清除了缓存等.
Vin*_*nai 18
你的方法几乎是正确的.
两件事:
1.设置新模板而不是实例化新块
而不是仅仅为product.info块分配不同的模板,而是创建一个具有相同名称的新实例,替换原始实例,然后设置新模板那.而是使用这个:
<mymodule_product_index>
<update handle="catalog_product_view" />
<reference name="product.info">
<action method="setTemplate">
<template>mymodule/product.phtml</template>
</action>
</reference>
</mymodule_product_index>
Run Code Online (Sandbox Code Playgroud)
这应该以干净的方式处理产品视图模板.
2.处理处理顺序
如果查看product.info.bundle声明捆绑产品的视图块的位置,您将看到它发生在bundle.xml文件中,在名为的布局更新句柄中<PRODUCT_TYPE_bundle>.
您的代码引用了<[route]_[controller]_[action]>布局句柄中的块,即<mymodule_product_index>.
这里需要注意的是布局句柄的处理顺序.大致是:
<default> <[route]_[controller]_[action]><custom_handles>所述<PRODUCT_TYPE_bundle>手柄属于第三类型的布局手柄,这意味着它是在后处理<mymodule_product_index>句柄.
实质上,您product.info.bundle在声明块之前引用该块.
要解决此问题,您还需要使用<PRODUCT_TYPE_bundle>句柄.当然,这将影响每个捆绑的产品展示.仅使用布局XML,没有干净的方法.
以下是如何解决该问题的一些建议.
您可以在模块中创建单独的路径以显示捆绑的产品,然后<PRODUCT_TYPE_bundle>使用update该页面的指令包含句柄.
在自定义操作控制器中,您可以添加另一个后 处理的布局更新句柄<PRODUCT_TYPE_bundle>.
product.info.bundle如果实例化,您可以使用事件观察器在块上设置模板.一种可能性是事件controller_action_layout_generate_blocks_after.
你明白了,有很多方法可以解决这个问题,但它们需要PHP.
| 归档时间: |
|
| 查看次数: |
28516 次 |
| 最近记录: |