Получите текст атрибута вместо идентификатора в пользовательской сетке клиентов.
-
12-12-2019 - |
Вопрос
Я хочу показать пользовательский атрибут клиента в сетке клиентов adminhtml.Мне удалось сделать это, создав новый модуль и расширив setCollection
метод Mage_Adminhtml_Block_Customer_Grid
public function setCollection($collection)
{
$collection->addAttributeToSelect('x_customer_category');
parent::setCollection($collection);
}
И я добавляю столбец через наблюдателя в представление
/**
* 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');
}
}
Однако, поскольку это атрибут с возможностью выбора, я получаю только идентификатор выбранного значения для клиента, но мне нужно текстовое значение, а не значение сущности данного атрибута.
Как мне это сделать?
Решение
Вам нужно изменить тип столбца с text
к options
и добавьте options
элемент, содержащий ваши значения в этом формате key => value
.
Что-то вроде этого:
$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');
Если возможные значения являются динамическими, вам следует сначала создать массив со всеми значениями.Вы должны знать, как получить все возможные значения и просто присвоить полученный массив options
элемент.
Если ваш атрибут является стандартным атрибутом выбора, вы можете создать его следующим образом:
$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'];
}
Затем добавьте свой столбец следующим образом:
$block->addColumnAfter('x_customer_category', array(
'header' => 'x_customer_category',
'type' => 'options',
'index' => 'x_customer_category',
'options' => $values,
), 'email');