在Magento管理后台的销售订单视图项目中添加新列

4
在Magento的管理界面中,我需要修改Sales/Order/View order表格,以便除了产品名称之外还显示它们的制造商。
我试图找到要修改的文件。我认为在app/code/core/Mage/Sales/Block/Order/Item/Renderer/Default.php中应该有一个包含所有显示列的部分,但是检查后似乎没有任何引用列/产品属性的内容。
我也尝试修改app/design/adminhtml/default/default/template/sales/order/view/items/renderer/default.phtml,将 <?php echo $this->getColumnHtml($_item, 'name') ?>
改为 <?php echo $this->getColumnHtml($_item, 'manufacturer') ?> 但是并没有改变任何东西,所以我认为那个文件没有参与其中...
请问有谁能指点我修改正确的文件吗?
谢谢!
6个回答

16

在浏览了大量的代码并得到同事的帮助后,我们找到了两个需要更改的文件以添加一个列到这种视图中:

  • app/design/adminhtml/default/default/template/sales/order/view/items.phtml 用于添加表头

  • app/design/adminhtml/default/default/template/sales/order/view/items/renderer/default.phtml 用于填充该列的数据。

我对Magento不是很有经验,但我想为了做一份"干净的工作",应该避免直接修改这些文件,而应该覆盖它们。

编辑

  • app/design/adminhtml/default/default/template/downloadable/sales/order/view/items/renderer/downloadable.phtml 用于填充可下载产品的数据列。

在这里查看有关覆盖的信息:https://dev59.com/S1zUa4cB1Zd3GeqP69fs - Caio Iglesias
1
请注意,可下载产品使用不同的模板app/design/adminhtml/default/default/template/downloadable/sales/order/view/items/renderer/downloadable.phtml来填充数据。 - Victor Anuebunwa

4

要添加表头和值,请在您的主题或模块中使用新参数添加layout sales_order_view.xml。

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceBlock name="order_items">
        <arguments>
            <argument name="columns" xsi:type="array">
                <item name="product" xsi:type="string" translate="true">Product</item>
                <item name="status" xsi:type="string" translate="true">Item Status</item>
                <item name="price-original" xsi:type="string" translate="true">Original Price</item>
                <item name="price" xsi:type="string" translate="true">Price</item>
                <item name="ordered-qty" xsi:type="string" translate="true">Qty</item>
                <item name="subtotal" xsi:type="string" translate="true">Subtotal</item>
                <item name="tax-amount" xsi:type="string" translate="true">Tax Amount</item>
                <item name="tax-percent" xsi:type="string" translate="true">Tax Percent</item>
                <item name="discont" xsi:type="string" translate="true">Discount Amount</item>
                <item name="total" xsi:type="string" translate="true">Row Total</item>
                <item name="repair" xsi:type="string" translate="true">Repair</item>
            </argument>
        </arguments>
        <block class="Namespace\Module\Block\Adminhtml\DefaultRenderer" as="default" template="Magento_Sales::order/view/items/renderer/default.phtml">
        <arguments>
            <argument name="columns" xsi:type="array">
                <item name="product" xsi:type="string" translate="false">col-product</item>
                <item name="status" xsi:type="string" translate="false">col-status</item>
                <item name="price-original" xsi:type="string" translate="false">col-price-original</item>
                <item name="price" xsi:type="string" translate="false">col-price</item>
                <item name="qty" xsi:type="string" translate="false">col-ordered-qty</item>
                <item name="subtotal" xsi:type="string" translate="false">col-subtotal</item>
                <item name="tax-amount" xsi:type="string" translate="false">col-tax-amount</item>
                <item name="tax-percent" xsi:type="string" translate="false">col-tax-percent</item>
                <item name="discont" xsi:type="string" translate="false">col-discont</item>
                <item name="total" xsi:type="string" translate="false">col-total</item>
                <item name="repair" xsi:type="string" translate="false">col-repair</item>
            </argument>
        </arguments>
        </block>   
    </referenceBlock>     
</body>

我添加了一个名为repair的新列。 现在你需要为该列添加值。所以,你需要在你的块中覆盖 '\Magento\Sales\Block\Adminhtml\Order\View\Items\Renderer\DefaultRenderer' 文件,并在 getColumnHtml() 方法中为该列添加你的值。


2

谢谢,这相当详尽。 - fdierre

2

添加表头的方法如下:

app/design/adminhtml/default/default/template/sales/order/view/items.phtml

app/design/adminhtml/default/default/template/sales/order/view/items/renderer/default.phtml

这些文件非常有用。


1

管理网格通常由它们的块控制。 对于销售,它是Mage_Adminhtml_Block_Sales_Order_Grid类

修改/覆盖_prepareColumns()方法应该解决问题。


0

我没有可用的Magento安装,但我有一些想法。 也许该列未在模板文件(phtml)中定义,而是在xml布局文件中定义。 只需在layout/sales.xml文件中搜索即可。

而且,也许您还没有禁用Magento缓存,这就是为什么您看不到任何更改的原因。


感谢您建议查找xml,我从未想过这一点!不幸的是,这并不是情况,因为该xml描述了“块”的分组以组成页面。我需要更改的是其中一个块的内容。 - fdierre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接