Magento 1.9 – Add New Column with Custom Attribute in Sales Order Grid

adminhtmlgridmagento-1.9order-gridsales-order

Magento ver. 1.9.3.3

I am trying to add columns with **custom product attribute **(like publisher which was created by me) in Admin > sales >order.

Copied

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

to

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

& create Renderer at

app/code/local/Mage/Adminhtml/Block/Sales/Order/Renderer/Productspublisher.php

code in Productspublisher.php

    <?php
class Mage_Adminhtml_Block_Sales_Order_Renderer_Productspublisher extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row)
    {                    
       $_item = $this->getItem());
       $product=Mage::getModel('catalog/product')->load($_item->getProductId());
       $str="";
       foreach($product as $item)
       {
         $str .= $item->getAttributeText('publisher');
       }

        unset($product);
        return $str;
    }
}
?>

code in protected function _prepareColumns() of Grid.php

$this->addColumn('publisher', array(
        'header' => Mage::helper('sales')->__('Publisher'),
        'index' => 'publisher',
        'renderer' => 'Mage_Adminhtml_Block_Sales_Order_Renderer_Productspublisher',
    ));

but getting error

Parse error: syntax error, unexpected ')' in
sitedomain.com\app\code\local\Mage\Adminhtml\Block\Sales\Order\Renderer\Productspublisher.php
on line 6

Best Answer

use this code in Productspublisher.php

<?php
class Mage_Adminhtml_Block_Sales_Order_Renderer_Productspublisher extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row)
    {                    

          $order=Mage::getModel('sales/order')->load($row->getData('entity_id'));              
        $str="";

        foreach($order->getAllVisibleItems() as $_item){  
        $product=Mage::getModel('catalog/product')->load($_item->getProductId());                    
            $str .= $product->getAttributeText('publisher')."<br>";
    }       

        unset($order);
        return $str;
    }
}
?>
Related Topic