Obtenez le texte de l'attribut au lieu de l'identifiant dans la grille client personnalisée
-
12-12-2019 - |
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?
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');