在客户管理管理网格中显示多选项客户属性

问题描述

| 好的,对于“客户属性”,我有一个多选项选择,我已将其添加到“管理客户”网格中。
    $prodCode = Mage::getSingleton(\'eav/config\')->getAttribute(\'customer\',\'prod_codes\');
    $prodCodeOptions = $prodCode->getSource()->getAllOptions(false);
    $prodoptions = array();

    foreach($prodCodeOptions as $k)
        $prodoptions[$k[\'value\']] = $k[\'label\'];

    $this->addColumn(\'prod_codes\',array(
        \'header\'    =>  Mage::helper(\'customer\')->__(\'Product Code\'),\'width\'     =>  \'100\',\'index\'     =>  \'prod_codes\',\'type\'      =>  \'options\',\'options\'   =>  $prodoptions,\'filter_condition_callback\'
                    => array($this,\'_filterProdoptionsCondition\'),));
我确实将我的属性添加到了Grid.PHP顶部的集合中:
->addAttributetoSelect(\'prod_codes\')
这是我的
_filterProdoptionsCondition
方法
protected function _filterProdoptionsCondition($collection,$column) {
    if(!$value = $column->getFilter()->getValue()) {
        return;
    }
    $this->getCollection()->addFieldToFilter(\'prod_codes\',array(\'finset\' => $value));
    #print($collection->getSelectsql());
}
现在,如果我仅选择了一个选项,则此工作正常且繁琐,一旦我对客户属性应用了多个选项,我将在管理网格中得到一个空白结果,但是仍然可以搜索。 仔细观察未注释的“ 4”,我发现属性ID值正在逗号分隔列表中返回。 现在,关于我所提出的背景问题,是否有一种方法或“ Magento”方式可以在我不知道的管理网格中显示这些多选项?还是我只需要简单地分解逗号值并调用一个新集合来构建显示值?任何帮助表示赞赏!     

解决方法

看来我不得不扩展Column渲染器以预期逗号值并简单地渲染它们,我很惊讶这不是内置的,因为存在创建多选项属性但没有网格显示选项的功能。 app / code / local / Mage / Adminhtml / Block / Widget / Grid / Column / Renderer / Options.php
public function render(Varien_Object $row)
{
    $options = $this->getColumn()->getOptions();
    $showMissingOptionValues = (bool)$this->getColumn()->getShowMissingOptionValues();
    if (!empty($options) && is_array($options)) {
        $value = $row->getData($this->getColumn()->getIndex());
        if (is_array($value)) {
            $res = array();
            foreach ($value as $item) {
                if (isset($options[$item])) {
                    $res[] = $options[$item];
                }
                elseif ($showMissingOptionValues) {
                    $res[] = $item;
                }
            }
            return implode(\',\',$res);
        }
        elseif (isset($options[$value])) {
            return $options[$value];
        } elseif (is_string($value)) { // <--- MY CHANGES HERE
            $values = explode(\',$value);
            $returnOptions = \"\";
            foreach($values as $k=>$v) {
                $returnOptions .= $options[$v]. \",\";
            }
            return substr($returnOptions,-2);
        }
        return \'\';
    }
}