Agregar columnas a la grilla de Productos en Magento

Una pequeña pero útil customización que suelen pedirme es la de agregar más información en la grilla de productos y, en otros casos, en la grilla de productos de las categorías. La idea es proveer de mayor cantidad de filtros según la necesidad de cada catalogación.

La grilla de productos, por defecto, tiene éstas columnas.

Grilla de Productos en Magento

Si bien hay varios tipos de filtros, los que suelo usar en éstas modificaciones son los campos de texto y los dropdown.

Por ejemplo, para agregar la columna Descripción a la grilla, y que funcione como filtro, debemos realizar el siguiente cambio en el archivo /app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php.

(En realidad, modificamos el archivo del Core sólo para el ejemplo. Lo que hay que hacer es aplicar una reescritura del bloque).

Como decía, vamos a editar el archivo y vamos a agregar al método _prepareCollection() el atributo que queremos utilizar en la definición de la colección.

$collection = Mage::getModel('catalog/product')->getCollection()
                ->addAttributeToSelect('sku')
                ->addAttributeToSelect('name')
                ->addAttributeToSelect('attribute_set_id')
                ->addAttributeToSelect('type_id')
                ->addAttributeToSelect('description') // ESTE ES NUESTRO NUEVO ATRIBUTO
                ->joinField('qty',
                    'cataloginventory/stock_item',
                    'qty',
                    'product_id=entity_id',
                    '{{table}}.stock_id=1',
                    'left');

Luego, en el método _prepareColumns() lo siguiente a la definición de la columna Qty.

$this->addColumn('description',
    array(
        'header' => Mage::helper('catalog')->__('Description'),
         'index' => 'description',
    )
);

De ésta forma, la grilla debería verse como ésta.

Grilla de Productos con columna de texto adicional en Magento

Desde ahora, podremos ver el contenido de ese atributo y utilizarlo como filtro de búsqueda.

Si quisiéramos usar un dropdown, como el caso del atributo Fabricante, el código a utilizar nos debería quedar de la siguiente manera.

En el método _prepareCollection() la llamada para la definición del collection debe agregar el atributo. Al igual que en el ejemplo anterior.

$collection = Mage::getModel('catalog/product')->getCollection()
                ->addAttributeToSelect('sku')
                ->addAttributeToSelect('name')
                ->addAttributeToSelect('attribute_set_id')
                ->addAttributeToSelect('type_id')
                ->addAttributeToSelect('manufacturer')
                ->joinField('qty',
                    'cataloginventory/stock_item',
                    'qty',
                    'product_id=entity_id',
                    '{{table}}.stock_id=1',
                    'left');

El siguiente paso es agregar la columna, la cual requiere de algunas líneas más de código.

$_attribute = Mage::getModel('eav/entity_attribute');
$_attribute->loadByCode(4,'manufacturer');
$_attribute_values = Mage::getResourceModel('eav/entity_attribute_option_collection')
                        ->setAttributeFilter($_attribute->getId())
                        ->setStoreFilter( Mage_Core_Model_App::ADMIN_STORE_ID, false)
                        ->getData();
$manufacturer = array();
foreach ($_attribute_values as $_manufacturer) {
    $manufacturer[$_manufacturer['option_id']] = $_manufacturer['value'];
}
 
$this->addColumn('manufacturer', array(
        'header'    => Mage::helper('catalog')->__('Manufacturer'),
        'index'     => 'manufacturer',
        'type'      => 'options',
        'options'   => $manufacturer
));

Ahora si, el resultado de éstas modificaciones nos debería mostrar la grilla con ésta nueva columna.

Grilla de Productos con columna de tipo dropdown en Magento

La segunda grilla que podemos modificar es la mostrada en la cuarta solapa en la edición de la Categoría. Con ésta modificación tendremos mayor comodidad si, por ejemplo, se crean categorías como marcas y el atributo manufacturer fue cargado. De ésta forma, asociar los productos correspondientes será muchísimo más rápido que utilizando otro criterio.

Para poder personalizar dicha grilla, nuestra modificación deberá recaer sobre el archivo /app/code/core/Mage/Adminhtml/Block/Catalog/Category/Tab/Product.php, en el cual aplicaremos exactamente el mismo código que ya probamos para la grilla de Productos.

Una vez hecha la modificación, pasaríamos de la grilla original.

Grilla de Productos dentro de una Categoría en Magento

A la grilla modificada.

Columna con dropdown en la grilla de Productos de la Categoría en Magento