2011-05-25 5 views
5

Dobrze, dzięki atrybutom klienta Mam opcję wyboru z wielu opcji, którą dodałem do karty zarządzania klientami.Wyświetl atrybut wielu opcji klienta w strukturze zarządzania klientem

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

mam mój atrybut dodany do kolekcji na szczycie mojej Grid.php:

->addAttributeToSelect('prod_codes')

Oto moja _filterProdOptionsCondition metoda:

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

Teraz ta praca dobrze i elegancko, jeśli mam tylko ONE z wybranych opcji, gdy zastosuję więcej niż jedną opcję atrybut klientów Dostaję puste wyniki w siatce administracyjnej, jednak wciąż można ją wyszukać.

Bliskie spojrzenie z nieumieszczonym komentarzem print($collection->getSelectSql()); Widzę, że wartości identyfikatora atrybutu są zwracane na liście rozdzielanej przecinkami.

Teraz na moje pytanie z tego tła określone, czy istnieje metoda lub "Magento" sposób wyświetlania tych opcji w sieci administracyjnej jestem tylko nieświadomy? Czy muszę po prostu uzyskać wartości przecinków rozbite i wezwać do nowej kolekcji do budowania wartości wyświetlania? Każda pomoc doceniona!

+1

Ok wydaje muszę przedłużyć renderujący opcji dla siatki widget administratora. Zabawne, że najbardziej nieokreślone odpowiedzi były najbardziej pomocne. http://www.magentocommerce.com/boards/port.php/viewthread/25566/#t84377 – B00MER

Odpowiedz

5

Pojawia się, że musiałem przedłużyć renderer kolumnowy, aby przewidzieć wartości przecinków i po prostu je renderować, jestem zaskoczony, że to nie jest wbudowane, ponieważ funkcjonalność istnieje po to, aby utworzyć atrybuty multioptions, ale nie ma opcji wyświetlania siatki.

app/code/local/Mage/Adminhtml/pustak/widget/Siatka/Kolumna/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

Jedyną rzeczą, którą chciałbym dodać jest to, że dodałem if (isset ($ options [$ v])) wokół linii, która dodaje do ciągu $ returnOptions. Otrzymałem błędy, jeśli $ v nie było w opcjach $. Wydaje się, że to naprawiło. –

Powiązane problemy