Magento网格列排序
从前,我尝试创建一些自定义列。我像应该的那样创建了整个XML结构。我创建了控制器。我甚至创建了自定义网格控制器 创建自定义网格后,我想列将进行排序。我错了,大错特错。单击列标题不起任何作用 建议Magento网格列排序,magento,adminhtml,Magento,Adminhtml,从前,我尝试创建一些自定义列。我像应该的那样创建了整个XML结构。我创建了控制器。我甚至创建了自定义网格控制器 创建自定义网格后,我想列将进行排序。我错了,大错特错。单击列标题不起任何作用 建议 class Company_Googlemerchant_Block_Adminhtml_Products_Grid extends Mage_Adminhtml_Block_Widget_Grid { public function __construct() { parent::__cons
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();
}
}您应该删除此行:
->addAttributeToSort('name', 'asc')
如果要按某些属性设置默认排序,则需要使用网格块的setDefaultDir方法:
$this->setDefaultSort('name');
$this->setDefaultDir('asc');
setId方法不能成为此问题的原因。此外,还应该为adminhtml控制器实现gridAction,该控制器将返回排序网格的html。大概是这样的:
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()
);
}
}
我想我通过将
setId('gm\u products\u grid')
更改为setId('adminhtml\u products\u grid')
解决了这个问题。不过,请验证。Serjio删除了->addAttributeToSort()
修复了该问题。然而,您对控制器的代码有点困惑indexAction()
已使用$this->loadLayout()
和$this->renderLayout()定义对不起。我认为只有当您想在网格中使用ajax时,才应该实现gridAction
。对于AJAX,您还应该在网格块中创建一个方法“public function getGridUrl(){return$this->getUrl('*/*/grid',array(''u current'=>true));}”。在您的\u构造中
方法中添加这一行$this->setUseAjax(true)代码>。您还可以删除$this->loadLayout()
调用,因为在这种情况下不需要它