2013-07-26 30 views
7

Próbuję dodać niestandardową kolumnę do siatki zamówienia sprzedaży, a do kolekcji dodano kolumnę łączenia i kolumnę, ale kolumna jest pusta. Ponadto, gdy próbuję filtrować, pojawia się ten błąd: Nie znaleziono kolumny: 1054 Nieznana kolumna "metoda" w "gdzie klauzula". Mój kod wydaje się być taki sam, jak w większości tutoriali, więc nie mogę się domyślić, dlaczego moja kolumna jest pozbawiona danych dotyczących płatności. Powtórzyłem ostatnie zapytanie SQL i uruchomiłem je w MySQL Workbench, a wyniki i składnia wydają się być w porządku. Czy czegoś brakuje? Czy muszę dodać kolumnę do tabeli sales_flat_order_grid? Zdaję sobie sprawę, że moje "ładne" nazwy metod płatności mogą nie być zgodne z kodem płatności wyświetlanym w kolumnie, gdy przechodzę do filtrowania, ale mam te same problemy, gdy używam kodu płatności w opcjach filtrowania. Pomyślałem, że uderzę później w ten szczegół, gdy zdobędę dane z kolumny. Korzystam z Enterprise 1.12.0.2.Magento Dodaj metodę płatności do siatki zamówienia administratora

app/code/local/mymodule/adminhtml/block/sprzedaż/zlecenia/Siatka:

 protected function _prepareCollection() 
{ 
    $collection = Mage::getResourceModel($this->_getCollectionClass()); 
    $collection->getSelect()->joinLeft(array('sfop'=>'sales_flat_order_payment'), 'main_table.entity_id = sfop.parent_id',array('sfop.method')); 
    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

    protected function _prepareColumns() 
{ //edited for brevity...only my additions below![enter image description here][1] 
     $payments = Mage::getSingleton('payment/config')->getActiveMethods(); 
    $methods = array(); 
    foreach ($payments as $paymentCode=>$paymentModel) 
    { 
     $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title'); 
     $methods[$paymentCode] = $paymentTitle; 
    } 

    $this->addColumn('method', array(
     'header' => Mage::helper('sales')->__('Payment Method'), 
     'index' => 'method', 
     'filter_index' => 'sfop.method', 
     'type' => 'options', 
     'width' => '70px', 
     'options' => $methods, 
    )); 

} 

Admin Screen

Odpowiedz

7

Trzeba zwrócić rodzica Admin Siatka nie rodzic klasy przepisujesz.

Wymienić _prepareCollection metody() z następujących elementów: -

protected function _prepareCollection() 
{ 
    $collection = Mage::getResourceModel($this->_getCollectionClass()); 
    $collection->join(array('payment'=>'sales/order_payment'),'main_table.entity_id=parent_id','method'); 
    $this->setCollection($collection); 
    return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection(); 
} 
+1

Dzięki! Chociaż otrzymałem błąd SQL "niejednoznaczna kolumna parent_id", więc musiałem zmienić "main_table.entity_id = parent_id" na "main_table.entity_id = payment.parent_id". Ponadto, ponieważ zmieniłeś alias tabeli z "sfop" na "payment", musisz powiązać odpowiednią zmianę z opcją "filter_index" w wywołaniu funkcji addColumn(). –

1
$collection->getSelect()->joinLeft('sales_flat_order_payment', 'main_table.entity_id = sales_flat_order_payment.parent_id',array('method')); 
$this->addColumn('method', array(
     'header' => Mage::helper('sales')->__('Method'), 
     'index' => 'method', 
     'filter_index' => 'sales_flat_order_payment.method', 
     )); 
+0

to nie działa, musisz dodać: 'filter_index' => 'payment.method' -> payment to alias dla tabeli, którą wskazujemy przy dołączaniu. – jruzafa

2

Rozwiązanie proponowane w:

http://www.atwix.com/magento/column-to-orders-grid/

znacznie czystsze.

W każdym razie sposobem na odzyskanie $ metod jako opcji dla siatki zaplecza nie jest Multistore, jeśli opcje płatności zostały włączone w zakresie strony. W tym przypadku zrobić:

 $methods = array(); 
     foreach (Mage::app()->getStores() as $storeId => $store) { 
     $payments = Mage::getSingleton('payment/config')->getActiveMethods($storeId); 

     foreach ($payments as $paymentCode => $paymentModel) { 
      $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title'); 
      if (!isset($methods[$paymentCode])) { 
       $methods[$paymentCode] = $paymentTitle; 
      } 
     } 
    } 
1

Dla renderowania, nie wszystkie metody płatności z tytułu pracy (TIG PostNL na przykład)

$payments = Mage::getSingleton('payment/config')->getActiveMethods(); 
$methods = array(); 
foreach ($payments as $paymentCode=>$paymentModel) 
{ 
    $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title', 1); 
    if(empty($paymentTitle)) { 
     $paymentTitle = Mage::helper('payment')->getMethodInstance($paymentCode)->getTitle(); 
    } 
    $methods[$paymentCode] = $paymentTitle; 
} 
Powiązane problemy