2011-05-25 89 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