Изменить Управление сеткой клиента - PullRequest
1 голос
/ 11 декабря 2011

Я создал пользовательский модуль, который отображает вкладку и раздел на панели конфигурации администратора для управления атрибутами клиента.

Я загрузил все атрибуты клиентов с флажком каждый.

Это мой код для отображения всех атрибутов клиентов в виде флажков. Я хочу, чтобы выбранное здесь значение флажка было добавлено в виде столбца в Управлении клиентской сеткой. Модель / Attributes.php

$attributes =   Mage::getModel('customer/entity_address_attribute_collection');
    $result = array();
    foreach ($attributes as $attribute)
    {
        if (($label = $attribute->getFrontendLabel()))
            $result[$attribute->getId()] = $label;
    }
    $attributes1 = Mage::getModel('customer/entity_attribute_collection');
    $result1 = array();
    foreach ($attributes1 as $attribute1)
    {
        if (($label1 = $attribute1->getFrontendLabel()))
            $result1[$attribute1->getId()] = $label1;
    }
    $final = array_merge($result, $result1);

    return $final;

Теперь, основываясь на выборе этих флажков, я бы хотел добавить дополнительный столбец в сетку «Управление клиентами».

Я попытался получить значение выбранного флажка, но я просто получил индексный номер массива.

       Mage::getStoreConfig('sectionname/groupname/fieldname');

Может кто-нибудь сказать мне, как извлечь выбранное значение флажка и добавить столбец на основе выбора, представленного этим флажком?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

Когда вы используете array_merge, вы уничтожаете правильные индексы, которые должны быть идентификаторами атрибутов.Также хорошей практикой является давать значимым именам для ваших переменных.

$result = array();
$addressAttributes = Mage::getModel('customer/entity_address_attribute_collection');
foreach ($addressAttributes as $addressAttribute)
{
    if (($addrlabel = $addressAttribute->getFrontendLabel()))
        $result[$addressAttribute->getId()] = $addrlabel;
}
$customerAttributes = Mage::getModel('customer/entity_attribute_collection');
foreach ($customerAttributes as $customerAttribute)
{
    if (($custlabel = $customerAttribute->getFrontendLabel()))
        $result[$customerAttribute->getId()] = $custlabel;
}

return $result;

Полагаю, следующим шагом будет удаление столбцов, которые добавит родительский элемент вашей сетки, они хранятся в защищенном свойстве _columns сетки.Не все столбцы должны быть удалены, например столбец массовых операций.Затем добавьте выбранные столбцы обратно.

protected function _prepareColumns()
{
    parent::_prepareColumns();
    // remove the excess columns here

    $attributeIds = Mage::getStoreConfig('sectionname/groupname/fieldname');
    $attributes = Mage::getModel('eav/entity_attribute')->getCollection()
        ->addFieldToFilter('attribute_id', array('in' => $attributeIds));

    foreach ($attributes as $attribute)
    {
        $options = array();
        if ($attribute->getFrontendInput() == 'select') {
            foreach ($attribute->getSource()->getAllOptions() as $value) {
                $options[$value['value']] = $value['label'];
            }
        }
        $this->addColumn($attribute->getCode(), array(
            'index'   => $attribute->getCode(),
            'header'  => $attribute->getFrontendLabel(),
            'type'    => $attribute->getFrontendInput(),
            'options' => $options
        ));
    }

    return $this;
}

Этот способ может потерять полезное форматирование, например ширину столбцов и т. Д., Поэтому более сложным способом было бы определить, какие столбцы уже есть, и оставить их, затемудаляйте только те, которые не были выбраны.

0 голосов
/ 12 декабря 2011

Я бы в вашем модуле установил в config.xml, что вы перезаписываете блок Mage_Adminhtml_Block_Customer_Grid своим собственным блоком (который наследуется от Mage_Adminhtml_Block_Customer_Grid), и в вашем собственном блоке сделайте функцию

protected function _prepareColumns()
{
    $this->addColumn('mycolumn', array(
        'header'    => Mage::helper('customer')->__('My Column'),
        'index'     => 'key',
    ));
    return parent::_prepareColumns();
}

Не зная больше о ваших данных, сложно дать лучший совет, но этого должно быть достаточно, чтобы вы начали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...