如何在magento 1.7中为订单网格添加客户“订单总数”和“总花费”

时间:2012-12-06 11:59:46

标签: magento

我想知道如何在magento 1.7

的订单网格中添加以下两个额外的列
  • 客户订单总数
  • 客户在订单上花费的总金额

我已设法添加列,但我无法显示任何数据。我相信问题的关键在于函数* _prepareCollection()*。

2 个答案:

答案 0 :(得分:2)

你是对的,Magento中任何网格的内容都包含在集合中。

收集对象最终解析为MySQL查询,因此为了使它们显示在网格中,您需要将该数据加入到集合中。只要您要求它们可搜索和排序。

您可以通过将子选择加入到您的集合中来完成此操作,例如:

    $alias = 'subselect';
    $subselect = Mage::getModel('Varien_Db_Select', 
                Mage::getSingleton('core/resource')->getConnection('core_read')
            )->from('sales_flat_order_grid', array(
                    'customer_id as s_customer_id', 
                    'sum(grand_total) as total_revenue', 
                    'count(*) as total_orders')
            )->group('customer_id');

    $collection->getSelect()
        ->joinInner(array($alias => $subselect), 
                "{$alias}.s_customer_id = main_table.customer_id");

_prepareCollection()来电中,应该覆盖app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php中的来电。

然后,您可以在total_revenue函数中定义total_orders_prepareColumns()的列。

实现此目的的另一种方法是关闭搜索和排序并调用列上的渲染器,然后实例化客户模型并将所有内容放在一起。

答案 1 :(得分:2)

抱歉需要50位代表发表评论(我认为),但Jonathan指的是(我希望)该文件:

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

您应该扩展(以便不编辑核心),将文件复制到:

/app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php

并在那里编辑,建议使用_prepareCollection()和_prepareColumns()

在调用setCollection()之前将其添加到_prepareCollection()函数中:

the answer from Jonathan

这是你的_prepareColumns()

$this->addColumn('total_revenue', array(
        'header' => Mage::helper('sales')->__('Total Revenue'),
        'index' => 'total_revenue',
        'filter_index' => 'ctotals.total_revenue',
    ));

     $this->addColumn('total_orders', array(
        'header' => Mage::helper('sales')->__('Total Orders'),
        'index' => 'total_orders',
        'filter_index' => 'ctotals.total_orders',
    ));