Magento(v 1.7.0.2) - 在Sales Order Grid中添加“Shipping Method”列

时间:2012-11-25 21:09:06

标签: magento

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

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

我研究了大量的方法,但要么是旧版本的magento,要么根本不起作用。据我所知,我需要做以下事情:

  1. 编辑_prepareCollection()
  2. 在_prepareColumns()中添加一个案例,如下所示:
  3. $this->addColumn('shipping_description', array( 'header' => Mage::helper('sales')->__('Shipping Method'), 'index' => 'shipping_description', ));

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

3 个答案:

答案 0 :(得分: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并将其放入 程序包/ MODULE_NAME /砌块/销售/订购/ 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();

}

}

答案 1 :(得分:0)

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

  • 我更喜欢使用setCollection代替_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和桌子.--)

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

答案 2 :(得分:0)