Frage

Ich möchte ein benutzerdefiniertes Attribut eines Kunden im adminhtml-Kundenraster anzeigen.Ich habe dies geschafft, indem ich ein neues Modul erstellt habe und das erweitert habe setCollection methode von Mage_Adminhtml_Block_Customer_Grid

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

Und ich füge die Spalte per Beobachter zur Ansicht hinzu

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

Da dies jedoch ein optionales Attribut ist, erhalte ich nur die ID des ausgewählten Werts für den Kunden, aber ich möchte den Textwert, nicht den Entitätswert des angegebenen Attributs.

Wie kann ich das tun?

enter image description here

War es hilfreich?

Lösung

Sie müssen Ihren Spaltentyp ändern von text zu options und fügen Sie eine hinzu options element, das Ihre Werte in diesem Format enthält key => value.
So etwas in der Art:

$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');

Wenn die möglichen Werte dynamisch sind, sollten Sie zuerst ein Array mit allen Werten erstellen.Sie sollten eine Möglichkeit kennen, alle möglichen Werte abzurufen und einfach das Array, das Sie erhalten, dem zuzuweisen options Element.
Wenn Ihr Attribut ein Standardauswahlattribut ist, können Sie es folgendermaßen erstellen:

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

Fügen Sie dann Ihre Spalte wie folgt hinzu:

 $block->addColumnAfter('x_customer_category', array(
            'header' => 'x_customer_category',
            'type'   => 'options',
            'index'  => 'x_customer_category',
            'options' => $values,
        ), 'email');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top