Question

Je souhaite afficher un attribut personnalisé d'un client dans la grille client adminhtml.J'ai réussi à le faire en créant un nouveau module et en étendant le setCollection méthode de Mage_Adminhtml_Block_Customer_Grid

public function setCollection($collection)
    {
        $collection->addAttributeToSelect('x_customer_category');
        parent::setCollection($collection);
    }

Et j'ajoute la colonne via observateur à la vue

/**
     * 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');
        }
    }

Cependant, comme il s'agit d'un attribut optionnel, je n'obtiens que l'identifiant de la valeur sélectionnée pour le client, mais je veux la valeur texte, pas la valeur d'entité de l'attribut donné.

Comment puis je faire ça?

enter image description here

Était-ce utile?

La solution

Vous devez changer votre type de colonne de text à options et ajoutez un options élément qui contient vos valeurs dans ce format key => value.
Quelque chose comme ça:

$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 les valeurs possibles sont dynamiques, vous devez d'abord créer un tableau avec toutes les valeurs.Vous devez connaître un moyen de récupérer toutes les valeurs possibles et d'attribuer simplement le tableau que vous obtenez au options élément.
Si votre attribut est un attribut de sélection standard, vous pouvez le construire comme ceci :

$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'];
}

Ajoutez ensuite votre colonne comme ceci :

 $block->addColumnAfter('x_customer_category', array(
            'header' => 'x_customer_category',
            'type'   => 'options',
            'index'  => 'x_customer_category',
            'options' => $values,
        ), 'email');
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top