Obtenga texto de atributo en lugar de identificación en la cuadrícula de clientes personalizada
-
12-12-2019 - |
Pregunta
Quiero mostrar un atributo personalizado de un cliente en la cuadrícula de clientes adminhtml.Logré hacer esto creando un nuevo módulo y extendiendo el setCollection
método de Mage_Adminhtml_Block_Customer_Grid
public function setCollection($collection)
{
$collection->addAttributeToSelect('x_customer_category');
parent::setCollection($collection);
}
Y agrego la columna vía observador a la vista.
/**
* Adds column to admin customers grid
*
* @param Varien_Event_Observer $observer
*
* @return Mscg_TemplateOverwrite_Model_Customer_Observer
*/
public function addCustomerGroupToGrid(Varien_Event_Observer $observer)
{
$block = $observer->getBlock();
if (!isset($block)) {
return $this;
}
if ($block->getType() == 'adminhtml/customer_grid') {
/* @var $block Mage_Adminhtml_Block_Customer_Grid */
$block->addColumnAfter('x_customer_category', array(
'header' => 'x_customer_category',
'type' => 'text',
'index' => 'x_customer_category',
), 'email');
}
}
Sin embargo, dado que este es un atributo de opciones, solo obtengo la identificación del valor seleccionado para el cliente, pero sí quiero el valor de texto, no el valor de entidad del atributo dado.
¿Cómo puedo hacer eso?
Solución
Necesita cambiar su tipo de columna de text
a options
y agrega un options
elemento que contiene sus valores en este formato key => value
.
Algo como esto:
$block->addColumnAfter('x_customer_category', array(
'header' => 'x_customer_category',
'type' => 'options',
'index' => 'x_customer_category',
'options' => array(
'id1' => 'label 1',
'id2' => 'label 2',
),
), 'email');
Si los valores posibles son dinámicos, primero debes crear una matriz con todos los valores.Deberías conocer una manera de recuperar todos los valores posibles y simplemente asignar la matriz que obtienes al options
elemento.
Si su atributo es un atributo de selección estándar, puede construirlo así:
$attribute = Mage::getModel('eav/config')->getAttribute('customer', 'x_customer_category');
$options = $attribute->getSource()->getAllOptions(false);
$values = array();
foreach ($options as $option){
$values[$option['value']] = $option['label'];
}
Luego agregue su columna así:
$block->addColumnAfter('x_customer_category', array(
'header' => 'x_customer_category',
'type' => 'options',
'index' => 'x_customer_category',
'options' => $values,
), 'email');