mejorar en respuesta https://stackoverflow.com/a/5994209/1025437 por clockworkgeek:
decidí a no utilizar los observadores, en mi opinio n esos eventos son demasiado globales y llevan a que se llame a nuestro observador muchas veces. Utilizando la siguiente reescritura en su propio módulo de config.xml:
<config>
<global>
<blocks>
<adminhtml>
<rewrite>
<catalog_product_grid>Myname_Catalogextended_Block_Adminhtml_Catalog_Product_Grid</catalog_product_grid>
</rewrite>
</adminhtml>
</blocks>
</global>
</config>
Con el archivo siguiente en
app/code/local/Myname/Catalogextended/Block/Adminhtml/Catalog/Product/Grid.php
que contiene algo como:
<?php
class Myname_Catalogextended_Block_Adminhtml_Catalog_Product_Grid extends Mage_Adminhtml_Block_Catalog_Product_Grid
{
/* Overwritten to be able to add custom columns to the product grid. Normally
* one would overwrite the function _prepareCollection, but it won't work because
* you have to call parent::_prepareCollection() first to get the collection.
*
* But since parent::_prepareCollection() also finishes the collection, the
* joins and attributes to select added in the overwritten _prepareCollection()
* are 'forgotten'.
*
* By overwriting setCollection (which is called in parent::_prepareCollection()),
* we are able to add the join and/or attribute select in a proper way.
*
*/
public function setCollection($collection)
{
/* @var $collection Mage_Catalog_Model_Resource_Product_Collection */
$store = $this->_getStore();
if ($store->getId() && !isset($this->_joinAttributes['special_price'])) {
$collection->joinAttribute(
'special_price',
'catalog_product/special_price',
'entity_id',
null,
'left',
$store->getId()
);
}
else {
$collection->addAttributeToSelect('special_price');
}
parent::setCollection($collection);
}
protected function _prepareColumns()
{
$store = $this->_getStore();
$this->addColumnAfter('special_price',
array(
'header'=> Mage::helper('catalog')->__('special_price'),
'type' => 'price',
'currency_code' => $store->getBaseCurrency()->getCode(),
'index' => 'special_price',
),
'price'
);
return parent::_prepareColumns();
}
}
En este ejemplo, un atributo nombrado special_price
se agrega después de la columna price
. Como este atributo tiene un alcance de tienda, se agrega el control de tienda.
Buenas cosas, excelente :) –
Hice una actualización de esta respuesta para que el administrador pueda filtrar el producto con la nueva columna añadida –
¡Ah! ¡Esto es increíble! Lo único que veo que falta es la capacidad de ordenar la nueva columna. –