【问题标题】:How to add customer "total number of orders" and "total spent" to order grid in magento 1.7如何在magento 1.7中将客户“订单总数”和“总支出”添加到订单网格
【发布时间】:2012-12-06 11:59:45
【问题描述】:

我想知道如何在 magento 1.7 的订单网格中添加以下两个额外的列

  • 客户总订单数
  • 客户在订单上花费的总金额

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

【问题讨论】:

    标签: magento


    【解决方案1】:

    你是对的,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 中的调用。

    然后您可以在您的_prepareColumns() 函数中定义total_revenue 和total_orders 的列。

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

    【讨论】:

    • 谢谢..您能否指定:“在您的 _prepareCollection() 调用中。”
    • 我指的是你原来的问题。 '我相信问题的关键在于函数 _prepareCollection()'。您可以将此代码插入(覆盖的)Grid.php 中的 _prepareCollection 函数中。
    • 我先试过了,但没用。但我可能做错了什么,第二次尝试成功:) 谢谢!
    • 一开始我已经放弃了 $alias 分配,所以这可能是问题所在。乐于助人。
    【解决方案2】:

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

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

    【讨论】:

    • 您对文件和方法是正确的。我在假设该块已正确扩展的情况下工作。这在其他地方都有介绍。
    • 抱歉我编辑了我的回复,我已经运行它并且它可以工作(重新编译后)
    • 如果您想添加到我的答案中,请随时对其进行编辑,但是将我的全部答案添加到您自己的答案中似乎有点狡猾。见
    • 啊,我明白了,你是其中之一。
    • mine 是任何初学者都可以遵循的完整答案,我使用您的代码添加到集合中,并对其进行了修改,因为它缺少 $alias 变量,它也没有引用您的文件正在编辑(或压倒一切),我只是假设一个完整而完整的答案更好,我实际上不知道我可以编辑其他人的答案(这很酷),因为我在这里相当新。 :)
    猜你喜欢
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多