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?

enter image description here

¿Fue útil?

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');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top