加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在布局xml中设置Magento块模板

发布时间:2020-12-16 07:59:32 所属栏目:百科 来源:网络整理
导读:在Magento的布局xml中设置块模板时遇到问题.我正在尝试设置子块的模板,而不是整个页面布局(几乎所有文档都解释了如何设置布局模板). 背景:我正在使用 update /更新自定义操作中的布局句柄.在我的模块的布局xml中标记. 本质上,我想重用内置产品视图操作的布
在Magento的布局xml中设置块模板时遇到问题.我正在尝试设置子块的模板,而不是整个页面布局(几乎所有文档都解释了如何设置布局模板).

背景:我正在使用< update />更新自定义操作中的布局句柄.在我的模块的布局xml中标记.

本质上,我想重用内置产品视图操作的布局和块,但为几个块提供自定义模板. (不仅仅是覆盖,这些都需要是全新的模板,只能在我的自定义操作中触发,并且可以自行覆盖).

我的布局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>

product.info.bundle上的setTemplate永远不会起作用;它似乎根本不会影响布局.我试过包装< reference>在其他<参考>来自父块的节点无效.是否可以用这种方式替换块模板?我觉得我的问题源于我正在使用< update />.

顺便说一下,我知道我的布局xml正在被加载并且没有错误,文件的其余部分工作正常,缓存被禁用,无论如何都清除了缓存等.

你的方法几乎是正确的.
两件事情:
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>

这应该以干净的方式处理产品视图模板.

2.处理处理订单
如果查看声明捆绑产品的视图块product.info.bundle的位置,您将看到它发生在bundle.xml文件中,名为< PRODUCT_TYPE_bundle>的布局更新句柄中.

您的代码引用了< [route] _ [controller] _ [action]>中的块.布局句柄,即< mymodule_product_index>.

这里需要注意的是布局句柄的处理顺序.
大致是:

>< default>
>< [route] _ [controller] _ [action]>
>< custom_handles>

< PRODUCT_TYPE_bundle> handle属于第三种类型的布局句柄,这意味着它在< mymodule_product_index>之后处理.处理.
实质上,您在声明块之前引用块product.info.bundle.

要解决此问题,您需要使用< PRODUCT_TYPE_bundle>也处理.当然,这将影响每个捆绑的产品展示.仅使用布局XML,没有干净的方法.

以下是如何解决该问题的一些建议.

您可以在模块中创建单独的路径以显示捆绑的产品,然后包含< PRODUCT_TYPE_bundle>处理使用该页面的更新指令.

在自定义操作控制器中,您可以添加在< PRODUCT_TYPE_bundle>之后处理的另一个布局更新句柄.

如果实例化,您可以使用事件观察器在product.info.bundle块上设置模板.一种可能性是事件controller_action_layout_generate_blocks_after.

你明白了,有很多方法可以解决这个问题,但它们需要PHP.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读