2

我正在尝试在位于此处的销售订单网格中为运输方式(标准、优先级、快递)添加一个新列:

/home/html/app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php

我研究了很多方法,但要么是针对旧版本的 magento,要么根本不起作用。据我了解,我需要执行以下操作:

  1. 编辑 _prepareCollection()
  2. 在 _prepareColumns() 中添加一个案例,如下所示:

$this->addColumn('shipping_description', array( 'header' => Mage::helper('sales')->__('Shipping Method'), 'index' => 'shipping_description', ));

有人可以帮我解决这个问题吗?

4

3 回答 3

2

要将运输信息添加到销售订单网格中,您必须覆盖 Mage_Adminhtml_Block_Sales_Order_Grid 类。为此创建您自己的模块。=> 在块部分的 config.xml 中
粘贴下面的 xml 代码

<globals>
    <block>
        <adminhtml>
            <rewrite>
                <sales_order_grid>Yourpackage_Yourmodule_Block_Sales_Order_Grid</sales_order_grid>
            </rewrite>
        </adminhtml>
    </block>
<globals>

现在定义一个类 Yourpackage_Yourmodule_Block_Sales_Order_Grid 并将其放入 package_name/module_name/Block/Sales/Order/Grid.php

class Yourpackage_Yourmodule_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
{
protected function _prepareCollection()
{

    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $collection->getSelect()->
    joinLeft('sales_flat_order', 'main_table.entity_id=sales_flat_order.entity_id', array("shipping_desc"=>"shipping_description"));

    $this->setCollection($collection);
    return $this;
}

protected function _prepareColumns()
{
    $this->addColumnAfter('shipping_desc', array(
        'header'=> Mage::helper('sales')->__('Shipping Descr #'),
        'width' => '80px',
        'type'  => 'text',
        'index' => 'shipping_desc',
    ),"real_order_id");
    return parent::_prepareColumns();

}

}
于 2012-11-26T10:58:00.447 回答
0

我自己仍在寻找一个好的解决方案。但作为一种方法,我想贡献我迄今为止基于 Magento 1.7 的知识

  • 我更喜欢使用 ofsetCollection而不是_prepareCollection(). 使用时似乎过滤等问题较少setCollection
  • 完美的属性如此接近,却又如此遥远。shipping_description 可以在sales_order_flat. 不幸的是,默认集合基于sales_flat_order_grid. 一种可能的解决方案是通过覆盖来切换它_getCollectionClass

    protected function _getCollectionClass()
    {
        //return 'sales/order_grid_collection';
        return 'sales/order_collection';
    }
    

    重要的是要说这会导致其他问题。例如,运输名称和帐单名称为空,因为它们的信息来自sales_flat_order_grid。我们可以从中得到它们,sales_flat_order_address但我不确定这是否会导致远离一个好的解决方案......

  • 另一种方法是加入sales_order_flat. 这样我们就可以保留所有信息sales_flat_order_grid,也可以获取shipping_method. 这里的问题是过滤时出现的 count(*) 语句。该错误是关于一个模棱两可的increment_id. 目前我认为这是一个 Magento 错误,因为increment_id不应该与它的表结合使用。

  • 不要忘记第三种方式:我们可以扩展saled_flat_order_grid和添加shipping_method,但我认为这会很苛刻。app/code/core只要没有人拿着枪站在你身后,就不要碰桌子;-)

到目前为止,我还没有决定走哪条路。也许我没有在这里列出另一种(更好的)方式?

于 2012-12-07T12:40:09.817 回答
0

此扩展程序应该为您的问题提供一个非常快速、简单的解决方案 http://www.magentocommerce.com/magento-connect/OSdave/extension/5814/orders_grid_payment_shipping_filters

于 2013-05-15T15:33:25.827 回答