我正在尝试在magento admin中创建自定义模块。我已经达到了将新链接添加到菜单并通过单击它的程度,我可以导航到模块控制器的索引操作。但是在这里我看不到网格,只显示了标题文本和块结构中添加的按钮。
我可以看到,由于这个块扩展了Mage_Adminhtml_Block_Widget_Grid_Container
类,它本身会将此模块中的网格块添加为其子节点。
包含了Grid.php,我通过在覆盖_prepareColumns
方法中打印出一些内容来验证。
我在这里缺少什么?
这些是Grid.php文件的内容
class Book_Brands_Block_Adminhtml_Brands_Grid extends Mage_Adminhtml_Block_Widget_Grid {
public function __construct() {
parent::__construct();
$this->setId('brandsGrid');
$this->setDefaultSort('brands_id');
$this->setDefaultDir('ASC');
$this->setSaveParametersInSession(true);
}
protected function _prepareCollection() {
$collection = Mage::getModel('brands/brands')->getCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns() {
$this->addColumn('brands_id', array(
'header' => Mage::helper('brands')->__('ID'),
'align' =>'right',
'width' => '50px',
'index' => 'brands_id',
));
$this->addColumn('title', array(
'header'=> Mage::helper('brands')->__('Title'),
'align' =>'left',
'index' => 'title',
));
$this->addColumn('status', array(
'header'=> Mage::helper('brands')->__('Status'),
'align' => 'left',
'width' => '80px',
'index' => 'status',
'type' => 'options',
'options' => array(
1 => 'Enabled',
2 => 'Disabled',
),
));
$this->addColumn('action', array(
'header' => Mage::helper('brands')->__('Action'),
'width' => '100',
'type' => 'action',
'getter' => 'getId',
'actions' => array(
array(
'caption' => Mage::helper('brands')->__('Edit'),
'url' => array('base'=> '*/*/edit'),
'field' => 'id'
)
),
'filter' => false,
'sortable' => false,
'index' => 'stores',
'is_system' => true,
));
return parent::_prepareColumns();
}
public function getRowUrl($row) {
return $this->getUrl('*/*/edit', array('id' => $row->getId()));
}
}
由于
PS。我试过刷新缓存但没有运气
答案 0 :(得分:1)
从内存中我认为_prepareColumns()
之前会调用_prepareCollection()
,因此如果集合中存在错误,即使您已确认了columns方法,也不会呈现网格。
parent::_prepareCollection()
的一部分尝试估计集合的getSize()
和getSelectCountSql()
方法中的页面数量,我经常忘记检查那些产生理智的结果会让我感到震惊。确保已打开所有日志记录并将以下内容放入.htaccess
文件中:
php_flag display_errors on
SetEnv MAGE_IS_DEVELOPER_MODE true
尝试查看使用这些命令生成的查询:
Mage::log((string)$collection->getSelect());
Mage::log((string)$collection->getSelectCountSql());
答案 1 :(得分:1)
看起来您已正确设置网格块。但是,您仍需要将网格加载到布局中并进行渲染。这可以在adminhtml布局xml或控制器中完成。
在/ app / design / adminhtml /../ layout / brands.xml中:
<?xml version="1.0"?>
<layout>
<brands_index_index>
<reference name="content">
<block type="brands/brands_grid" name="brands_grid"></block>
</reference>
</brands_index_index>
</layout>
在您的控制器中:
public function indexAction()
{
$this->loadLayout();
$this->_addContent(
$this->getLayout()->createBlock('brands/brands_grid','brands')
);
$this->renderLayout();
}
请注意,您必须根据具体实施修改上述内容。我认为布局xml最初比控制器中的程序化实例更难理解,但是,从长远来看,它会导致更少的代码膨胀。
答案 2 :(得分:0)
只是快速查看,我在代码中唯一能看到的是:
protected function _prepareCollection() { $collection = Mage::getModel('brands/brands')->getCollection(); $this->setCollection($collection); return parent::_prepareCollection(); } //Try to use it like this: protected function _prepareCollection() { $collection = Mage::getModel('brands/brands')->getCollection(); $this->setCollection($collection); parent::_prepareCollection(); return $this; }