2012-08-24 78 views
3

所以我試圖讓我的自定義模塊顯示網格(暫時顯示任何東西,我會擔心收集一旦它的工作!)。Magento自定義模塊網格不顯示

問題是,我的網格小部件類的_prepareCollection()和/或_prepareColumns()方法似乎從未被調用,並且網格從不顯示(也沒有按鈕和標題文本)。 (Magento管理頁眉和頁腳和導航正確顯示它在中間只是一片空白!)

這是我到目前爲止有:

應用程序/代碼/本地/ myNameSpace對象/ Mymodule中的/ etc/config中。 XML

<?xml version="1.0" ?> 
<config> 
    <modules> 
     <MyNamespace_Mymodule> 
      <version>0.0.1</version> 
     </MyNamespace_Mymodule> 
    </modules> 
    <!-- Define frontend and backend routers --> 
    <admin> 
     <routers> 
      <mymodule> 
       <use>admin</use> 
       <args> 
        <module>MyNamespace_Mymodule</module> 
        <frontName>mymodule</frontName> 
       </args> 
      </mymodule> 
     </routers> 
    </admin> 
    <!-- /Define frontend and backend routers --> 
    <global> 
     <helpers> 
      <mymodule> 
       <class>MyNamespace_Mymodule_Helper</class> 
      </mymodule> 
     </helpers> 
     <blocks> 
      <mymodule> 
       <class>MyNamespace_Mymodule_Block</class> 
      </mymodule> 
     </blocks> 
    </global> 
    <adminhtml> 
     <menu> 
      <mymodule module="mymodule"> 
       <title>My Module</title> 
       <sort_order>80</sort_order>    
       <children> 
        <items module="mymodule"> 
         <title>Manage My Module</title> 
         <sort_order>0</sort_order> 
         <action>mymodule/adminhtml_mymodule</action> 
        </items> 
       </children> 
      </mymodule> 
     </menu> 
     <!-- define layout updates --> 
     <layout> 
      <updates> 
       <mymodule> 
        <file>mymodule.xml</file> 
       </mymodule> 
      </updates> 
     </layout> 
     <!-- /define layout updates --> 
    </adminhtml> 
</config> 

然後我的控制器:

應用程序/代碼/本地/ myNameSpace對象/ Mymodule中/控制器/ Adminhtml/MymoduleController.php

<?php 
class MyNamespace_Mymodule_Adminhtml_MymoduleController extends Mage_Adminhtml_Controller_action 
{ 
    public function indexAction() { 
     $this->getLayout()->createBlock('mymodule/adminhtml_mymodule'); 
     $this->loadLayout(); 
     $this->renderLayout(); 
    } 
} 

然後在我的網格容器:

應用程序/代碼/本地/ myNameSpace對象/ Mymodule中/座/ Adminhtml/Mymodule.php

<?php 
class MyNamespace_Mymodule_Block_Adminhtml_Mymodule extends Mage_Adminhtml_Block_Widget_Grid_Container 
{ 
    public function __construct() 
    { 
     echo __METHOD__ . " (Line #" . __LINE__ . ")<br/>"; 
     parent::__construct(); 
     $this->_controller = 'adminhtml_mymodule'; 
     $this->_blockGroup = 'mymodule'; 
     $this->_headerText = Mage::helper('mymodule')->__('my header text'); // this is not rendered 
     $this->_addButtonLabel = Mage::helper('mymodule')->__('my button text'); // this is not rendered 

    } 

    protected function _prepareLayout() 
    { 
     $this->setChild('grid', 
      $this->getLayout()->createBlock($this->_blockGroup.'/' . $this->_controller . '_grid', 
      $this->_controller . '.grid')->setSaveParametersInSession(true)); 
     return parent::_prepareLayout(); 
    } 
} 

然後在我的網格小部件:

應用程序/代碼/local/MyNamespace/Mymodule/Block/Adminhtml/Mymodule/Grid.php

<?php 
class MyNamespace_Mymodule_Block_Adminhtml_Mymodule_Grid extends Mage_Adminhtml_Block_Widget_Grid 
{ 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->setId('mymoduleGrid'); 
     $this->setDefaultSort('id'); 
     $this->setDefaultDir('ASC'); 
     $this->setSaveParametersInSession(true); 
    } 

    protected function _prepareCollection() 
    { 
     echo __METHOD__ . " (Line #" . __LINE__ . ")<br/>"; // This is never called 
     $collection = Mage::getModel('catalog/product')->getCollection(); // just a temp collection for the time being 

     $this->setCollection($collection); 
     return parent::_prepareCollection(); 
    } 

    protected function _prepareColumns() 
    { 
     echo __METHOD__ . " (Line #" . __LINE__ . ")<br/>"; // This is never called 
     $this->addColumn('id', array(
      'header' => Mage::helper('mymodule')->__('ID'), 
      'align'  =>'right', 
      'width'  => '10px', 
      'index'  => 'id', 
     )); 
     return parent::_prepareColumns(); 
    } 
} 

最後我的佈局XML:

應用程序/設計/ adminhtml /默認/缺省/佈局/ mymodule.xml

<?xml version="1.0"?> 
<layout version="0.1.0"> 
    <adminhtml_mymodule_index> 
     <reference name="content"> 
      <block type="mymodule/adminhtml_mymodule" name="mymodule" /> 
     </reference> 
    </adminhtml_mymodule_index> 
</layout> 

有沒有在日誌中被顯示的錯誤,我現在有點stumpped和其他SO答案不似乎適合。

任何人都不明白爲什麼我的網格(甚至是空的)沒有顯示?

謝謝。

編輯注意到有些類有錯誤的情況(Mynamespace應該是MyNamespace)。改變它們但沒有區別

回答

10

這是你的佈局的句柄標籤的問題。

它應該是:

<?xml version="1.0"?> 
<layout version="0.1.0"> 
    <mymodule_adminhtml_mymodule_index> 
     <reference name="content"> 
      <block type="mymodule/adminhtml_mymodule" name="mymodule" /> 
     </reference> 
    </mymodule_adminhtml_mymodule_index> 
</layout> 

對於解釋和一些提示,你可以看到這一點:

My layout isn't loading in my Magento admin view

= UPDATE =

你也不用叫$this->getLayout()->createBlock('mymodule/adminhtml_mymodule');在您的控制器中,您的mymodule.xml

OR

你可以通過改變你的控制器的行動統一到忽略你的mymodule.xml(不需要調用它):

public function indexAction() { 
    $this->loadLayout(); 
    $myblock = $this->getLayout()->createBlock('mymodule/adminhtml_mymodule'); 
    $this->_addContent($myblock); 
    $this->renderLayout(); 
} 

看到的定義是:上面

Mage_Adminhtml_Controller_Action 

protected function _addContent(Mage_Core_Block_Abstract $block) 
{ 
    $this->getLayout()->getBlock('content')->append($block); 
    return $this; 
} 

那些代碼做同樣的東西,如mymodule.xml,追加塊'mymodule/adminhtml_mymodule'content

這是你所有的選擇!

+0

就是這樣!非常感謝:) – sulman

+0

更新了我的解釋 - >刪除未使用的代碼 – ivantedja

0

你能確定你的索引操作是否被正確調用?

,當你這樣做:

<?php 
class Mynamespace_Mymodule_Adminhtml_MymoduleController extends Mage_Adminhtml_Controller_action 
{ 
public function indexAction() { 
    echo "im here";exit; //<----does this display? 
    $this->getLayout()->createBlock('mymodule/adminhtml_mymodule'); 
    $this->loadLayout(); 
    $this->renderLayout(); 
} 

}

,最後它的重要的是首先加載您的佈局。所以在我opnion改變你的索引操作這樣的:

<?php 
class Mynamespace_Mymodule_Adminhtml_MymoduleController extends Mage_Adminhtml_Controller_action 
{ 
public function indexAction() { 
    $this->loadLayout(); // <---- This first 
    $this->getLayout()->createBlock('mymodule/adminhtml_mymodule');// <---- then this 
    $this->renderLayout(); 
} 

}

+0

indexAction()正常工作(回聲確定),但更改加載順序時沒有喜悅。謝謝。 – sulman

+0

你有php錯誤嗎? – activeDev

+0

有錯誤,但沒有顯示。謝謝 – sulman