【问题标题】:Magento (v 1.7.0.2) - Add "Shipping Method" column in Sales Order GridMagento (v 1.7.0.2) - 在销售订单网格中添加“运输方式”列
【发布时间】:2012-11-25 21:09:05
【问题描述】:

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

/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', ));

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

【问题讨论】:

    标签: magento


    【解决方案1】:

    要将运输信息添加到销售订单网格中,您必须覆盖 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();
    
    }
    
    }
    

    【讨论】:

    • 简单的答案,你的解决方案不起作用。有很多问题,例如按列排序、订单状态或任何类型的过滤。它会引发大量错误。我已经聘请了一名程序员来构建一个久经考验的模块。
    • 对于任何发现此问题并希望找到解决方案的人,只需将“return $this”更改为“return parent::_prepareCollection()”等等
    【解决方案2】:

    我自己仍在寻找一个好的解决方案。但作为一种方法,我想贡献我迄今为止基于 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 和桌子;-)

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 请发布的不仅仅是链接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多