Настраиваемая Сетка Модуля Администратора - Текст Заголовка Не Отображается, но Отображается Сетка


Я создаю пользовательский серверный модуль с сеткой. Все функции работают нормально, за исключением того, что часть заголовка содержимого не отображается. это означает, что кнопка "добавить запись" также не отображается.

Как вы можете видеть в приведенном ниже коде, я добавил инструкции журнала отладки, чтобы проверить, выполняется ли код. для всех из них выписки регистрируются должным образом... за исключением метода __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>
Author: Raphael at Digital Pianism, 2016-09-01

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

 2
Author: Raphael at Digital Pianism, 2016-09-01 09:51:08

Измените свой 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(); в начало вашей функции, повторите попытку и дайте мне знать, работает она или нет

 0
Author: Murtuza Zabuawala, 2016-09-01 09:50:31

Обновить indexAction() код функции до следующего

public function indexAction()
        {

            Mage::log( "Mycompany_Mymodule_Adminhtml_Mycompany_Mymodule_RulesController indexAction" );

            $this->loadLayout();

            $this->_setActiveMenu('mycompany_mymodule');

            $this->renderLayout();
        }

Сетка будет включена в блок контейнера, который вы уже добавили в mymodule.xml.

 0
Author: Gulshan Maurya, 2016-09-01 09:52:24