2011-05-25 90 views
5

好客户属性,我有一个多选项选择,我已经添加到管理客户网格。在客户管理管理网格中显示多选项客户属性

$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()); 
} 

现在这个工作罚款和丹迪,如果我只有ONE选择的选项,一旦我申请多个选项客户属性我会在管理网格中得到一个空白结果,但它仍然是可搜索的。

仔细看看print($collection->getSelectSql());取消注释我看到属性ID值在逗号分隔列表中返回。

现在我的问题与该背景奠定了,有没有一种方法或“Magento”的方式来显示管理网格内的这些多选项,我只是不知道?或者,我是否需要简单地获取逗号值爆炸并呼叫新的集合来构建显示值?任何帮助感谢!

+1

好吧看来我需要扩展的选项渲染器管理部件电网。有趣的是,最模糊的答案是最有帮助的。 http://www.magentocommerce.com/boards/port.php/viewthread/25566/#t84377 – B00MER 2011-05-27 21:16:13

回答

5

出现我不得不扩展列渲染器来预测逗号值并简单地渲染它们,我很惊讶这不是内置的,因为存在创建多选项属性但没有网格显示选项的功能。

应用程序/代码/本地/法师/ Adminhtml /座/空间/表格/列/渲染/ 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, 0, -2); 
     } 
     return ''; 
    } 
} 
+1

唯一我要补充的是,我添加了一个if(isset($ options [$ v]))到$ returnOptions字符串。如果$ v不在$ options中,我得到错误。这样做似乎修复了它。 – 2012-02-27 18:27:25