我正在为我的商店开发一个简单的扩展程序,它需要覆盖模板文件。
相关模板用于生成订单中商品列表中的每个订单项。要查看我在说什么,您可以转到我的帐户 - >我的订单,选择订单,然后向下滚动以查看“订购的商品”下的表格。我想要替换的默认模板文件是sales / order / items / renderer / default.phtml。
我已成功设置扩展以使用自己的layout.xml文件。例如,我可以关闭页面上的各种块。但是,我更改模板的代码无效。我怀疑我的参考名称是不正确的,但我不确定。
这是我到目前为止所做的:
<?xml version="1.0"?>
<layout version="0.1.0">
<sales_order_view>
<reference name="my.account.wrapper">
<reference name="sales.order.view">
<reference name="order.items">
<reference name="sales.order.item.renderer.default">
<action method="setTemplate">
<template>groupname_extensionname/sales/order/items/renderer/default.phtml</template>
</action>
</reference>
</reference>
</reference>
</reference>
</sales_order_view>
</layout>
任何人都可以在我的xml中提供我需要的更正(如有必要,可以在其他地方提供)吗?提前谢谢。
以下是我修改过的Ben的XML版本(他只错过了一个易于添加的参数):
<?xml version="1.0"?>
<layout version="0.1.0">
<sales_order_view>
<reference name="order_items">
<action method="addItemRender">
<arg1>default</arg1>
<arg2>sales/order_item_renderer_default</arg2>
<arg3>groupname_extensionname/sales/order/items/renderer/default.phtml</arg3>
</action>
</reference>
</sales_order_view>
</layout>
我发现你可以复制参数的默认xml标签,所以你可以使用type,block,template来代替arg1,arg2,arg3。
<?xml version="1.0"?>
<layout version="0.1.0">
<sales_order_view>
<reference name="order_items">
<action method="addItemRender">
<type>default</type>
<block>sales/order_item_renderer_default</block>
<template>groupname_extensionname/sales/order/items/renderer/default.phtml</template>
</action>
</reference>
</sales_order_view>
</layout>
答案 0 :(得分:4)
布局<references/>
不起作用。外部标记(<sales_order_view/>
)称为句柄,然后句柄内的第一级标记是创建或获取对块对象的引用的命令,然后其中的层用于通过<action/>
节点调用块方法。 (两个例外是<remove/>
和<update>
,它们与块创建过程分开扫描,可以放在任何地方。)
因此,您的布局xml更新将如下所示。
<sales_order_view>
<reference name="name.of.block.in.layout">
<action method="setTemplate">
<template>groupname_extensionname/sales/order/items/renderer/default.phtml</template>
</action>
</reference>
</sales_order_view>
其他一些建议可以帮助您一路走来
您需要将“name.of.block.in.layout”替换为Magento为具有sales/order/items/renderer/default.phtml
模板的块
确保将layout xml添加到ADMIN布局中。
确保在<depends/>
中使用app/etc/modules/Foo_Bar.xml
以确保在Mage_Adminhtml
模块之后加载yoru模块。
Magento有可能在PHP代码中生成您正在寻找的块,这意味着您将无法像使用它一样使用布局
查看Magento的不同默认管理主题(或使用现代版本的Magento附带的查找主题并且是默认的管理主题)可能更简单,只需通过模板替换phtml文件层次结构。
(Magento布局非常复杂,我需要a small book来解释它们。)
答案 1 :(得分:2)
嘿,关于引用的一个好处是它们通过布局对象的全局空间操作,因此您不需要进行任何嵌套。通过布局xml来完成这个工作的荣誉;它很强大!
我认为,您要做的是替换在销售模块的LXML文件中设置的默认项目渲染器(请参阅sales.xml)。这些是通过来自Mage_Sales_Block_Order_Items
的{{1}}方法添加到块类sales/order_items
(或类组表示法中的addItemRender()
)。您需要替换存储在Mage_Sales_Block_Items_Abstract
数组的default
键中的渲染器,您只需执行以下操作即可:
_itemRenderers
如果这不能解决问题,请告诉我,因为除此之外不应该采取更多措施。