我想知道如何在magento 1.7
的订单网格中添加以下两个额外的列我已设法添加列,但我无法显示任何数据。我相信问题的关键在于函数* _prepareCollection()*。
答案 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',
));