2012-07-02 3 views
5

Es war einmal, ich habe versucht, einige benutzerdefinierte Spalten zu erstellen. Ich habe die gesamte XML-Struktur so erstellt, wie ich es hätte tun sollen. Ich habe Controller erstellt. Ich habe sogar den benutzerdefinierten Grid-Controller erstellt.Magento Grid Spaltensortierung

Nachdem ich mein benutzerdefiniertes Raster erstellt hatte, dachte ich mir, dass die Spalten sortiert werden würden. Ich lag falsch, tot falsch. Ein Klick auf die Spaltenüberschriften macht nichts.

Vorschläge?

class Company_Googlemerchant_Block_Adminhtml_Products_Grid extends Mage_Adminhtml_Block_Widget_Grid 
{ 
public function __construct() 
{ 
    parent::__construct(); 
    $this->setId('gm_product_grid'); 
    $this->setDefaultSort('id'); 
    $this->setDefaultDir('ASC'); 
    $this->setSaveParametersInSession(false); 
} 

protected function _prepareCollection() 
{ 
    $storeId = 1; 
    $collection = Mage::getModel('catalog/product')->getCollection()->addStoreFilter($storeId); 
    $collection 
     ->addAttributeToSelect('enable_googlemerchant') 
     ->addAttributeToSelect('name') 
     ->addAttributeToSelect('entity_id') 
     ->addAttributeToSelect('type_id') 
     ->addAttributeToSelect('status') 
     ->addFieldToFilter('enable_googlemerchant', array("eq" => '1')) 
     ->addFieldToFilter('status', array("eq" => '1')) 
     ->addAttributeToSort('name', 'asc') 
     ; 

    $this->setCollection($collection); 

    return parent::_prepareCollection(); 
} 

protected function _prepareColumns() 
{ 
    $this->addColumn('id', array(
     'header' => Mage::helper('googlemerchant')->__('ID'), 
     'align'  =>'left', 
     'index'  => 'entity_id', 
     'width'  => '100px', 
    )); 

    $this->addColumn('product_name', array(
     'header' => Mage::helper('googlemerchant')->__('Product Name'), 
     'align'  =>'left', 
     'index'  => 'name', 
     'width'  => '250px', 
    )); 

    $this->addColumn('type_id', array(
     'header' => Mage::helper('googlemerchant')->__('Product Type'), 
     'align'  =>'left', 
     'index'  => 'type_id', 
     'width'  => '100px', 
    )); 

    $this->addColumn('action', array(
     'header' => Mage::helper('googlemerchant')->__('Action'), 
     'width' => '100px', 
     'type' => 'action', 
     'getter' => 'getId', 
     'actions' => array(
      array(
       'caption' => Mage::helper('googlemerchant')->__('Remove from export'), 
       'url'  => array('base' => '*/*/removeexport'), 
       'field' => 'id' 
      ) 
     ), 
     'filter' => false, 
     'sortable' => true, 
     'index'  => 'id', 
    )); 

    return parent::_prepareColumns(); 
} 

}

+0

Ich glaube, ich das Problem behoben, indem 'setId ('gm_product_grid')' auf 'setId ('adminhtml_products_grid')'. Ich würde mich jedoch über eine Überprüfung freuen. –

Antwort

13

Sie diese Zeile entfernen sollte:

->addAttributeToSort('name', 'asc') 

Wenn Sie Sortierung festlegen möchten Standard von einigen Attribut Sie setDefaultDir Methode des Gitterblock verwenden müssen:

$this->setDefaultSort('name'); 
$this->setDefaultDir('asc'); 

setId-Methode konnte nicht der Grund für dieses Problem sein. Außerdem sollten Sie GridAction für Ihren adminhtml Controller implementieren, der HTML des sortierten Grids zurückgibt. Etwas wie folgt aus:

class My_Module_Adminhtml_EntityController extends Mage_Adminhtml_Controller_Action { 
................................................... 
    public function gridAction() 
    { 
     $this->loadLayout(); 
     // for AJAX queries 
     $this->getResponse()->setBody(
      // it means that you have difened class My_Module_Block_Adminhtml_Entity_Grid 
      $this->getLayout()->createBlock('my_module/adminhtml_entity_grid')->toHtml() 
     ); 
    } 
} 
+0

Serjio, entfernt '-> addAttributeToSort()' das Problem behoben. Allerdings war der Code über den Controller ein wenig verwirrend. 'indexAction()' ist bereits definiert mit '$ this-> loadLayout()' und '$ this-> renderLayout();' –

+1

Entschuldigung. Ich denke, Sie sollten "GridAction" nur implementieren, wenn Sie Ajax für Gitter verwenden möchten. Für AJAX sollten Sie auch eine Methode 'public function erzeugen getGridUrl() {return $ this-> getUrl ('*/*/grid', array ('_ current' => true)); } 'in Ihrem Grid-Block. Und in Ihrer '__construct' Methode fügen Sie diese Zeile' $ this-> setUseAjax (true); 'hinzu. Auch können Sie '$ this-> loadLayout()' Anruf entfernen, weil es in diesem Fall nicht notwendig ist – Serjio

+0

Serjio, danke für die Klarstellung. Das hilft. :) –

Verwandte Themen