Magento从Mage命名空间调用我的命名空间块

时间:2012-09-21 21:44:02

标签: magento module namespaces block

我已经在这几个小时了。 Magento一直试图从Mage命名空间而不是我自己的命名空间中调用我的块。

错误: 异常'Mage_Core_Exception',并在/Library/WebServer/Documents/magento/app/Mage.php:594中显示消息'无效的块类型:Mage_Newcart_Block_Adminhtml_Igrid'

我到处试图找到问题。我知道它符合我的布局并且手柄有效:

<?xml version="1.0"?>

<layout version="0.1.0">

      <images_adminhtml_index_index>
           <reference name="content">
                  <block type="newcart/adminhtml_igrid"  name="adminblock" />
           </reference>
      </images_adminhtml_index_index>
</layout>

但是我的块(实际上是一个网格容器)不会从正确的命名空间中调用:

应用程序/代码/本地/ [命名空间] /Newcart/Block/Adminhtml/Igrid.php

class [Namespace]_Newcart_Block_Adminhtml_Igrid extends Mage_Adminhtml_Block_Widget_Grid_Container
{
    public function __construct()
    {

     $this->_controller = 'adminhtml_imagegrid';
     $this->_blockGroup = 'newcart';
     $this->_headerText = 'Images';
     $this->_addButtonLabel = 'Add an Image';

     parent::__construct();
     }

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

注意:Imagegrid是同一目录中的文件。我试过'$ this-&gt; _controller ='adminhtml_igrid';', 但是,它没有解决问题。

配置:

<?xml version="1.0"?>

  <config>
     <modules>
        <[namespace]_Newcart>
          <version>0.1.0</version>
        </[namespace]_Newcart>
     </modules>
     <admin>
        <routers>
            <images>
                <use>admin</use>
                <args>
                    <module>[namespace]_Newcart</module>
                    <frontName>imageadmin</frontName>
                </args>
            </images>
        </routers>
    </admin>
    <adminhtml>
        <layout>
            <updates>
                <images>
                    <file>images.xml</file>
                </images>
            </updates>
        </layout>
    </adminhtml>
    <global>
        <blocks>
            <[namespace]_newcart>
                <class>[namespace]_Newcart_Block</class>
            </[namespace]_newcart>
        </blocks>
        <models>
            <images>
                <class>[namespace]_Newcart_Model</class>
                <resourceModel>image_resource</resourceModel>
            </images>  
            <image_resource>
                <class>[namespace]_Newcart_Model_Resource</class>
                <entities>
                    <imagemodel>
                        <table>nw_images</table>
                    </imagemodel>
                </entities>
            </image_resource>
        </models>
    </global>
</config>

我到处寻找原因并且不知道在哪里寻找错误。请帮忙!!!

2 个答案:

答案 0 :(得分:2)

回答(谢谢,ivantedja!)

它应该是&#39; newcart&#39;,而不是&#39; [namespace] _newcart&#39; (在块节点中,您不需要指定命名空间)

答案 1 :(得分:0)

只需将下一个代码添加到模块的config.xml中:

<config>
    ...
    <global>
        ...
        <blocks>
            <[namespace]_newcart>
                <class>[Namespace]_Newcart_Block</class>
            </[namespace]_newcart>
        </blocks>
        ...
    </global>
    ...
</config>