在 Magento 的布局 xml 中设置 block 模板时遇到问题。我正在尝试设置子 block 的模板,而不是整个页面布局(几乎所有文档都解释了如何设置布局的模板)。
背景:我正在使用 <update />
更新自定义操作中的布局句柄我模块的布局 xml 中的标记。
本质上,我想重用内置产品 View 操作的布局和 block ,但为几个 block 提供自定义模板。 (不仅仅是覆盖,这些需要是全新的模板,仅在我的自定义操作上触发并且它们本身是可覆盖的)。
我的布局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>
setTemplate
在 product.info.bundle
从不工作;它似乎根本不影响布局。我试过包装 <reference>
在其他 <reference>
来自父 block 的节点无效。是否可以以这种方式替换 block 模板?我觉得我的问题源于我使用 <update />
的事实。 .顺便说一句,我知道我的布局 xml 正在加载并且没有错误,文件的其余部分工作正常,缓存被禁用,无论如何都清除了缓存,等等。
最佳答案
你的方法几乎是正确的。
两件事情:
1.设置新模板而不是实例化新 block
而不是仅仅为 product.info
分配一个不同的模板。 block ,您正在创建一个具有相同名称的新实例,替换原始实例,然后在其上设置新模板。而是使用这个:
<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>
这应该以一种干净的方式处理产品 View 模板。
2.办理加工订单
如果您查看查看 block 的位置
product.info.bundle
对于捆绑产品的声明,您将看到它发生在 bundle.xml 文件中,在名为 <PRODUCT_TYPE_bundle>
的布局更新句柄中.您的代码引用了
<[route]_[controller]_[action]>
中的 block 布局句柄,即 <mymodule_product_index>
.这里要注意的是处理订单布局句柄。
大致是:
<default>
<[route]_[controller]_[action]>
<custom_handles>
<PRODUCT_TYPE_bundle>
句柄属于第三种布局句柄,即在<mymodule_product_index>
之后处理。处理。本质上,您引用的是 block
product.info.bundle
在它被宣布之前。要解决此问题,您需要使用
<PRODUCT_TYPE_bundle>
处理为好。当然,这将影响每个捆绑的产品展示。仅使用布局 XML 没有干净的方法。以下是一些如何解决该问题的建议。
您可以在模块中创建一个单独的路线来显示捆绑的产品,然后包含
<PRODUCT_TYPE_bundle>
使用 update
处理该页面的指令也是如此。在您的自定义操作 Controller 中,您可以添加另一个已处理的布局更新句柄 之后
<PRODUCT_TYPE_bundle>
.您可以使用事件观察器在
product.info.bundle
上设置模板。如果它被实例化,则阻塞。一种可能性是事件 controller_action_layout_generate_blocks_after
.你明白了,有很多方法可以解决这个问题,但它们需要 PHP。
关于magento - 在布局 xml 中设置 Magento block 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543732/