Me enfrento al problema de agregar una columna en la cuadrícula del cliente y mostrar valores en esa columna.
Aquí está el código de observador que he estado tratando de mostrar la columna:
if ($block->getType() == 'adminhtml/customer_grid') {
$customer = $observer->getCustomer();
$collection = Mage::getResourceModel('customer/customer_collection');
$block->addColumnAfter('mobile', array(
'header' => 'Mobile No.',
'type' => 'text',
'index' => 'mobile',
), 'email');
}
Esto agrega la columna pero no se muestran valores debajo de eso.
magento-1.7
customer
grid
grid-serlization
Kuldeep
fuente
fuente
$block->getCollection()
Respuestas:
Para agregar una columna a la cuadrícula del cliente, debe anular 2 elementos en el bloque
Mage_Adminhtml_Block_Customer_Grid
._prepareCollection
- para agregar su atributo en la colección_prepareColumns
- para agregar la columna en su cuadrícula.Para esto, debe crear una nueva extensión. Digamos que es
Easylife_Customer
. Para esto necesitará los siguientes archivos:app/etc/module/Easylife_Customer.xml
- el archivo de declaraciónapp/code/local/Easylife/Customer/etc/config.xml
- el archivo de configuraciónapp/code/local/Easylife/Customer/Block/Adminhtml/Customer/Grid.php
- su propia versión de la red de clientes. Lee mis comentarios en el código:Borra el caché y deberías estar listo.
fuente
Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
El camino de los observadores:
Declare 2 observadores en su archivo config.xml: uno para agregar su columna al bloque de cuadrícula y el otro para cargar datos del atributo correspondiente:
Cree una clase de observador con los métodos adecuados:
fuente
Respondo al comentario de Alex:
Para exportar en CSV también use
en lugar de
fuente
Asumiendo que
$block
es una instancia deMage_Adminhtml_Block_Customer_Grid
entonces$block->getCollection()
debería devolver una colección de clientes utilizada en la cuadrícula que es una instancia deMage_Customer_Model_Resource_Customer_Collection
. Cuando mires el códigoMage_Adminhtml_Block_Customer_Grid::_prepareCollection()
, verás cómo puedes agregar un atributo a esa colección.Debería ser (aunque no probado)
suponiendo que hay un atributo móvil agregado a la entidad del cliente
o si el móvil es un atributo agregado a la entidad de dirección de facturación
fuente
Mage_Adminhtml_Block_Widget_Grid::_prepareCollection
este se llama:$this->getCollection()->load()
. Esto significa que se ignora cualquier otra modificación de la colección. Pero, como dije, este es un muy buen enfoque para exportar una grilla. Al realizar una exportaciónload
, no se llama al método hasta mucho más tarde.De otra manera:
Vuelva a escribir el bloque de cuadrícula del cliente con su módulo personalizado y use la
setCollection()
función para obtener su atributo personalizado.app / code / [local o comunidad] /YourCompany/YourModule/etc/config.xml
aplicación / código / [local o comunidad] /YourCompany/YourModule/Block/Customer/Grid.php
fuente
addColumnsOrder
función. Por favor verifique la respuesta actualizada.Necesitaba eliminar algunas columnas predeterminadas y agregar columnas adicionales en la cuadrícula del cliente. Decidí hacer las columnas configurables. Primero agregué 2 cuadros de selección múltiple en system.xml :
Los modelos fuente son sencillos:
El segundo modelo fuente
Luego anule la clase de cuadrícula:
fuente