Настраиваемая Сетка Модуля Администратора - Текст Заголовка Не Отображается, но Отображается Сетка
Я создаю пользовательский серверный модуль с сеткой. Все функции работают нормально, за исключением того, что часть заголовка содержимого не отображается. это означает, что кнопка "добавить запись" также не отображается.
Как вы можете видеть в приведенном ниже коде, я добавил инструкции журнала отладки, чтобы проверить, выполняется ли код. для всех из них выписки регистрируются должным образом... за исключением метода __construct()
в rules.php
(контейнер сетки файл).
Заранее благодарю вас за помощь!
Config.xml :
<config>
<modules>
<Mycompany_Mymodule>
<version>1.0.0</version>
</Mycompany_Mymodule>
</modules>
<global>
<models>
<mycompany_mymodule>
<class>Mycompany_Mymodule_Model</class>
<resourceModel>mycompany_mymodule_resource</resourceModel>
</mycompany_mymodule>
<mycompany_mymodule_resource>
<class>Mycompany_Mymodule_Model_Resource</class>
<entities>
<rules>
<table>mycompany_mymodule_rules</table>
</rules>
</entities>
</mycompany_mymodule_resource>
</models>
<resources>
<mycompany_mymodule_setup>
<setup>
<module>Mycompany_Mymodule</module>
</setup>
</mycompany_mymodule_setup>
</resources>
<blocks>
<mycompany_mymodule>
<class>Mycompany_Mymodule_Block</class>
</mycompany_mymodule>
</blocks>
<helpers>
<mycompany_mymodule>
<class>Mycompany_Mymodule_Helper</class>
</mycompany_mymodule>
</helpers>
</global>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<Mycompany_Mymodule before="Mage_Adminhtml">Mycompany_Mymodule_Adminhtml</Mycompany_Mymodule>
</modules>
</args>
</adminhtml>
</routers>
</admin>
<adminhtml>
<layout>
<updates>
<mycompany_mymodule>
<file>mycompany/mymodule.xml</file>
</mycompany_mymodule>
</updates>
</layout>
</adminhtml>
</config>
Adminhtml.xml :
<config>
<menu>
<mycompany_mymodule translate="title" module="mycompany_mymodule">
<title>Customer Sort</title>
<sort_order>100</sort_order>
<children>
<rules translate="title" module="mycompany_mymodule">
<title>Rules</title>
<sort_order>10</sort_order>
<action>adminhtml/mycompany_mymodule_rules</action>
</rules>
</children>
</mycompany_mymodule>
</menu>
</config>
RulesController.php :
<?php
class Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController extends Mage_Adminhtml_Controller_Action
{
public function indexAction()
{
Mage::log( "Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController indexAction" );
$this->loadLayout();
$this->_setActiveMenu('mycompany_mymodule');
$this->_addContent($this->getLayout()->createBlock('mycompany_mymodule/adminhtml_rules_grid'));
$this->renderLayout();
}
public function gridAction(){
Mage::log( "Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController gridAction" );
$this->loadLayout();
$this->getResponse()->setBody(
$this->getLayout()->createBlock('mycompany_mymodule/adminhtml_rules_grid')->toHtml()
);
}
public function editAction()
{
Mage::log( "Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController editAction" );
$this->loadLayout();
$this->_setActiveMenu('mycompany_mymodule');
$this->_addContent($this->getLayout()->createBlock('mycompany_mymodule/adminhtml_rules_edit'));
$this->renderLayout();
}
public function newAction()
{
// We just forward the new action to a blank edit form
Mage::log( "Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController newAction " );
$this->_redirectReferer();
}
public function saveAction()
{
Mage::log( "Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController saveAction " );
$this->_redirect('*/*/');
}
public function deleteAction()
{
Mage::log( "Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController deleteAction " );
$this->_redirect('*/*/');
}
public function massDeleteAction()
{
Mage::log( "Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController massDeleteAction" );
$this->_redirectReferer();
}
}
Rules.php :
<?php
class Mycompany_Mymodule_Block_Adminhtml_Rules extends Mage_Adminhtml_Block_Widget_Grid_Container {
public function __construct(){
Mage::log( "Mycompany_Mymodule_Block_Adminhtml_Rules" );
$this->_blockGroup = 'mycompany_mymodule'; # the first part of the grouped class name, i.e. (some_module)/whatever
$this->_controller = 'adminhtml_rules';
$this->_headerText = Mage::helper('mycompany_mymodule')->__('Manage Rules');
$this->_addButtonLabel = Mage::helper('mycompany_mymodule')->__('Add New Rule');
parent::__construct();
}
}
Grid.php
<?php
class Mycompany_Mymodule_Block_Adminhtml_Rules_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
public function __construct()
{
Mage::log( "Mycompany_Mymodule_Block_Adminhtml_Rules_Grid" );
parent::__construct();
$this->setId('rulesGrid');
$this->setDefaultSort('rules_id');
$this->setDefaultDir('asc');
$this->setSaveParametersInSession(true);
$this->setUseAjax(true);
}
protected function _prepareCollection(){
Mage::log( "Mycompany_Mymodule_Block_Adminhtml_Rules_Grid _prepareCollection" );
$collection = Mage::getModel('mycompany_mymodule/rules')->getCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns()
{
Mage::log( "Mycompany_Mymodule_Block_Adminhtml_Rules_Grid _prepareColumns" );
$this->addColumn(
'rules_id',
array(
'type' => 'number',
'header' => Mage::helper('mycompany_mymodule')->__('ID'),
'width' => '30px',
'index' => 'rules_id',
'sortable' => true,
)
);
$this->addColumn(
'searchstring',
array(
'header' => Mage::helper('mycompany_mymodule')->__('Search String'),
'width' => '400px',
'index' => 'searchstring',
)
);
$this->addColumn(
'destination',
array(
'type' => 'number',
'header' => Mage::helper('mycompany_mymodule')->__('Destination'),
'width' => '50px',
'index' => 'destination',
)
);
$this->addColumn(
'order',
array(
'type' => 'number',
'header' => Mage::helper('mycompany_mymodule')->__('Order'),
'width' => '50px',
'index' => 'order',
)
);
$this->addColumn(
'enabled',
array(
'type' => 'number',
'header' => Mage::helper('mycompany_mymodule')->__('Enabled'),
'width' => '50px',
'index' => 'enabled',
)
);
return parent::_prepareColumns();
}
public function getRowUrl($row)
{
return $this->getUrl('*/*/edit', array('rules_id' => $row->getId()));
}
protected function _prepareMassaction()
{
Mage::log( "Mycompany_Mymodule_Block_Adminhtml_Rules_Grid _prepareMassaction" );
$this->setMassactionIdField('mass_id');
$this->getMassactionBlock()->setFormFieldName('mass');
$this->getMassactionBlock()->addItem(
'delete',
array(
'label' => Mage::helper('mycompany_mymodule')->__('Delete'),
'url' => $this->getUrl('*/*/massDelete'),
'confirm' => Mage::helper('mycompany_mymodule')->__('Are you sure?')
)
);
return $this;
}
}
--ОБНОВЛЕНИЕ --
Mymodule.xml
<layout>
<adminhtml_rules_index>
<reference name="content">
<block type="mycompany_mymodule/adminhtml_rules" name="mycompany_mymodule_rules" />
</reference>
</adminhtml_rules_index>
</layout>
3 answers
Вам не нужно указывать здесь какой-либо XML-формат макета.
Проблема здесь в том, что ваш код контроллера:
$this->loadLayout();
$this->_setActiveMenu('mycompany_mymodule');
$this->_addContent($this->getLayout()->createBlock('mycompany_mymodule/adminhtml_rules_grid'));
$this->renderLayout();
Сделает следующее:
- загрузите XML-файл макета
- добавьте
mycompany_mymodule/adminhtml_rules
в содержимое, используя XML-формат вашего макета - этот блок автоматически добавит блок
grid
- добавьте
mycompany_mymodule/adminhtml_rules_grid
в содержимое, используя свой код контроллера - визуализация макета
Сначала вам нужно заменить:
$this->_addContent($this->getLayout()->createBlock('mycompany_mymodule/adminhtml_rules_grid'));
С помощью:
$this->_addContent($this->getLayout()->createBlock('mycompany_mymodule/adminhtml_rules'));
Затем вы можете избавиться от своего XML-файла макета, и это должно решить вашу проблему. Не забудьте также избавиться от объявления в вашем config.xml
Измените свой Rules.php
<?php
class Mycompany_Mymodule_Block_Adminhtml_Rules extends Mage_Adminhtml_Block_Widget_Grid_Container {
public function __construct(){
parent::__construct();
Mage::log( "Mycompany_Mymodule_Block_Adminhtml_Rules" );
$this->_blockGroup = 'mycompany_mymodule'; # the first part of the grouped class name, i.e. (some_module)/whatever
$this->_controller = 'adminhtml_rules';
$this->_headerText = Mage::helper('mycompany_mymodule')->__('Manage Rules');
$this->_addButtonLabel = Mage::helper('mycompany_mymodule')->__('Add New Rule');
}
}
И поместите parent::__construct();
в начало вашей функции, повторите попытку и дайте мне знать, работает она или нет
Обновить indexAction()
код функции до следующего
public function indexAction()
{
Mage::log( "Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController indexAction" );
$this->loadLayout();
$this->_setActiveMenu('mycompany_mymodule');
$this->renderLayout();
}
Сетка будет включена в блок контейнера, который вы уже добавили в mymodule.xml
.