I’m having this problem with adding custom columns in the order grid in Magento 1.7.0.0 and I was hoping you’d be able to give me a hand in here.
Basically I followed this guide http://www.atwix.com/magento/customize-orders-grid/ which explained I had to make a local version of /app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php and make a couple of changes to have the extra columns I want. By following said guide, it said that I had to edit the function _prepareCollection() to add this line (specifying the fields I want to extract in the array)
$collection->getSelect()->join('magento_sales_flat_order_address', 'main_table.entity_id = magento_sales_flat_order_address.parent_id',array('telephone', 'email'));
Before
return parent::_prepareCollection();
And add the two columns in _prepareColumns() like this:
$this->addColumn('telephone', array(
'header' => Mage::helper('sales')->__('Telephone'),
'index' => 'telephone',
));
$this->addColumn('email', array(
'header' => Mage::helper('sales')->__('Email'),
'index' => 'email',
));
And that was it, apparently… Or maybe not, since it throws the following error when I do that:
Item (Mage_Sales_Model_Order) with the same id "XXXX" already exist
To which the solution, according to the comments underneath, was to add the following line in _prepareCollection before $this->setCollection($collection):
$collection->getSelect()->group('main_table.entity_id');
After adding the line, the Order Grid now shows the Email and Phone columns just like I want it, but turns out the pagination stopped working, it only shows the most recent 20 and it says “Pages 1 out of 1”, “2 records found” on top. I can’t seem to figure out why this is happening and every comment I see around doesn’t go beyond the last instruction above. What could possibly be the cause of this issue?
I assume it could be replicated since I haven’t made any other modifications of this model.
Alright, solved it. This is what I did:
Inspired by this answer https://stackoverflow.com/a/4219386/2009617, I made a copy of the file
lib/Varien/Data/Collection/Db.php, placed it underapp/core/local/Varien/Data/Collection/Db.phpand copied the modifications suggested on that answer to fix the group select count error that was giving me problems above. So far it seemed to work.However, there was a problem in the rows, when I clicked on the orders it said the Order “no longer exists”, so I checked the actual url and turns out the order_id in the url was the same as the “entity_id” in the order_address table, which didn’t correspond with the actual associative id of the order (parent_id). After tweaking for a long time with the MySQL query, I realized the issue was in the functions called by the
_prepareColumns()andgetRowUrl()functions in the/app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.phpI made, since they were retrieving the wrong Id. So I made the following changes:In
_prepareColumns(), within the code corresponding to the Action column, I changed the ‘getter’ to ‘getParentId’, like this:And in the
getRowUrl()function, I changed the $row statement within thegetUrl()function like this:And now it works like a charm. I hope this helps somebody else.