在布局xml中设置Magento块模板
在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.处理处理订单 您的代码引用了< [route] _ [controller] _ [action]>中的块.布局句柄,即< mymodule_product_index>. 这里需要注意的是布局句柄的处理顺序. >< default> < PRODUCT_TYPE_bundle> handle属于第三种类型的布局句柄,这意味着它在< mymodule_product_index>之后处理.处理. 要解决此问题,您需要使用< PRODUCT_TYPE_bundle>也处理.当然,这将影响每个捆绑的产品展示.仅使用布局XML,没有干净的方法. 以下是如何解决该问题的一些建议. 您可以在模块中创建单独的路径以显示捆绑的产品,然后包含< PRODUCT_TYPE_bundle>处理使用该页面的更新指令. 在自定义操作控制器中,您可以添加在< PRODUCT_TYPE_bundle>之后处理的另一个布局更新句柄. 如果实例化,您可以使用事件观察器在product.info.bundle块上设置模板.一种可能性是事件controller_action_layout_generate_blocks_after. 你明白了,有很多方法可以解决这个问题,但它们需要PHP. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |