Sort Orders by Customer Groups in magento 1.7
I have to Sort order by Customer Groups in magento 1.7.0.2, I try to follow magento wiki:
http://www.magentocommerce.com/wiki/5_-_modules_and_development/admin/sort_order_by_customer_groups
But it doesn't works.
I copy app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php to app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php to not touch magento core.
I add this code to this function
protected function _prepareColumns(){
$this->addColumn('customer_group_id', array(
'header'=> Mage::helper('customer')->__('Customer Group'),
'width' => '80px',
'index' => 'group_id',
'renderer' => new Mage_Adminhtml_Block_Sales_Order_Renderer_CustomerGroup(),
'type' => 'options',
'options' => Mage_Adminhtml_Block_Sales_Order_Renderer_CustomerGroup::getCustomerGroupsArray(),
));
// now the code original
}
Second, in the same file I add this override function
protected function _addColumnFilterToCollection($column) {
if ($this->getCollection()) {
$field = ( $column->getFilterIndex() ) ? $column->getFilterIndex() : $column->getIndex();
if ($column->getFilterConditionCallback()) {
call_user_func($column->getFilterConditionCallback(), $this->getCollection(), $column);
}
else {
$cond = $column->getFilter()->getCondition();
if ($field && isset($cond)) {
if (in_array('NULL', array_values($cond))) {
$this->getCollection()->addFieldToFilter($field, array('null' => true));
}
else {
$this->getCollection()->addFieldToFilter($field, $cond);
}
}
}
}
return $this;
}
third, in the Grid.php I modify this function:
protected function _prepareCollection()
{
$collection = Mage::getResourceModel($this->_getCollectionClass());
$collection->getSelect()->joinLeft(
array('ce'=>'customer_entity'),
'ce.entity_id=main_table.customer_id',
array('ce.group_id')
);
$this->setCollection($collection);
return parent::_prepareCollection();
}
Now I create this file in app/code/local/Mage/Adminhtml/Block/Sales/Order/Renderer/CustomerGroup.php with this code:
class Mage_Adminhtml_Block_Sales_Order_Renderer_CustomerGroup
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
// Holds an associative array with customer_group_id and the associated label
private static $_customerGroups = array(); // "singleton"
public static function getCustomerGroupsArray() {
// Make sure the static property is only populated once
if (count(self::$_customerGroups) == 0) {
$customer_group = new Mage_Customer_Model_Group();
$customer_groups = $customer_group->getCollection()->toOptionHash();
self::$_customerGroups = $customer_groups;
}
return self::$_customerGroups;
}
// Transforms the customer_group_id into corresponding label
public function render(Varien_Object $row)
{
$val = $this->_getValue($row);
$customer_groups = self::getCustomerGroupsArray();
return isset($customer_groups[$val]) ? $customer_groups[$val] : false;
}
}
And I have this error:
:5:{i:0;s:92:"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'customer_group_id' in 'where clause'";i:1;s:5645:"#0 MyProjectFolderlibVarienDbStatementPdoMysql.php(111): Zend_Db_Statement_Pdo->_execute(Array)
Thanks in advance !
我在magento论坛中找到了解决方案,有人给我提供了正确的解决方案:
protected function _prepareCollection()
{
$collection = Mage::getResourceModel($this->_getCollectionClass());
$collection->getSelect()->join(
array('oe'=>'sales_flat_order'),
'oe.entity_id=main_table.entity_id',
array('oe.customer_group_id')
);
$this->setCollection($collection);
return parent::_prepareCollection();
}
链接地址: http://www.djcxy.com/p/65180.html
上一篇: 管理员页面上的Magento 404
下一篇: 在magento 1.7中按客户组排序