2011-05-25 4 views
5

Okay con gli attributi cliente Ho una selezione multi-opzione che ho aggiunto alla griglia Gestione clienti.Mostra attributo cliente multi-opzione all'interno della griglia di amministrazione gestione clienti

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

io ho il mio attributo aggiunto alla collezione in cima alla mia Grid.php:

->addAttributeToSelect('prod_codes')

Ecco il mio metodo _filterProdOptionsCondition:

protected function _filterProdOptionsCondition($collection, $column) { 
    if(!$value = $column->getFilter()->getValue()) { 
     return; 
    } 
    $this->getCollection()->addFieldToFilter('prod_codes', array('finset' => $value)); 
    #print($collection->getSelectSql()); 
} 

Ora questo lavoro bene e dandy se ho solo ONE delle opzioni selezionate, una volta che ho applicato più di una opzione per l'attributo clienti otterrò risultati vuoti all'interno della griglia di amministrazione, tuttavia è ancora ricercabile.

Uno sguardo ravvicinato con lo print($collection->getSelectSql()); non commentato Vedo che i valori di ID attributo vengono restituiti in un elenco delimitato da virgole.

Ora sulla mia domanda con quello sfondo presentato, c'è un metodo o un modo "Magento" per visualizzare queste multi-opzioni all'interno della griglia di amministrazione di cui sono semplicemente all'oscuro? O devo semplicemente ottenere i valori virgola esplosi e chiamare una nuova collezione per costruire i valori di visualizzazione? Qualsiasi aiuto apprezzato!

+1

Va bene sembra che ho bisogno di estendere il renderer opzioni per la griglia widget di admin. Strano come la più vaga delle risposte sia stata la più utile. http://www.magentocommerce.com/boards/port.php/viewthread/25566/#t84377 – B00MER

risposta

5

Appare che ho dovuto estendere il renderer Column per anticipare i valori virgola e semplicemente renderli, sono stupito che questo non è incorporato poiché la funzionalità esiste per creare gli attributi multioptions ma nessuna opzione di visualizzazione della griglia per esso.

app/code/local/Mage/Adminhtml/blocchi/Widget/griglia/colonna/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, 0, -2); 
     } 
     return ''; 
    } 
} 
+1

L'unica cosa che vorrei aggiungere è che ho aggiunto un if (isset ($ options [$ v])) attorno alla riga che aggiunge alla stringa $ returnOptions. Stavo ricevendo errori se $ v non era in $ opzioni. Farlo sembra averlo risolto. –

Problemi correlati