Magento管理问题

Magento管理问题,magento,Magento,嗨,我正在为我的扩展创建我的第一个管理部分。我创建了一个菜单,它链接到一个显示网格的页面。问题是,当您单击以编辑记录时,它会显示此错误 致命错误:在第129行的/Applications/MAMP/htdocs/theBookClub/app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php中对非对象调用成员函数setData() 就我个人而言,我在任何相关文件中都看不到任何参考资料 class Namespace_Bookshel

嗨,我正在为我的扩展创建我的第一个管理部分。我创建了一个菜单,它链接到一个显示网格的页面。问题是,当您单击以编辑记录时,它会显示此错误

致命错误:在第129行的/Applications/MAMP/htdocs/theBookClub/app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php中对非对象调用成员函数setData()

就我个人而言,我在任何相关文件中都看不到任何参考资料

class Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
   public function __construct()
{
    parent::__construct();

    $this->_objectId = 'id';
    $this->_blockGroup = 'bookshelf';
    $this->_controller = 'bookshelf_admin';
    $this->_mode = 'edit';

    $this->_addButton('save_and_continue', array(
              'label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),
              'onclick' => 'saveAndContinueEdit()',
              'class' => 'save',
    ), -100);
    $this->_updateButton('save', 'label', Mage::helper('bookshelf')->__('Save Example'));

    $this->_formScripts[] = "
        function toggleEditor() {
            if (tinyMCE.getInstanceById('form_content') == null) {
                tinyMCE.execCommand('mceAddControl', false, 'edit_form');
            } else {
                tinyMCE.execCommand('mceRemoveControl', false, 'edit_form');
            }
        }

        function saveAndContinueEdit(){
            editForm.submit($('edit_form').action+'back/edit/');
        }
    ";
}

public function getHeaderText()
{
    if (Mage::registry('example_data') && Mage::registry('example_data')->getId())
    {
        return Mage::helper('bookshelf')->__('Edit Example "%s"', $this->htmlEscape(Mage::registry('example_data')->getName()));
    } else {
        return Mage::helper('bookshelf')->__('New Example');
    }
}
还有这个

class Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Grid extends                Mage_Adminhtml_Block_Widget_Grid {

public function __construct() {
    parent::__construct();
    $this->setId('bookshelf_grid');
    $this->setDefaultSort('bookshelf_id');
    $this->setDefaultDir('desc');
    $this->setSaveParametersInSession(true);
}

protected function _prepareCollection() {
    $collection = Mage::getModel('bookshelf/bookshelf')->getCollection();
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

protected function _prepareColumns() {
    $this->addColumn('bookshelf_id', array(
        'header' => Mage::helper('bookshelf')->__('ID'),
        'align' => 'right',
        'width' => '50px',
        'index' => 'bookshelf_id',
    ));

    $this->addColumn('customer_id', array(
        'header' => Mage::helper('bookshelf')->__('Name'),
        'align' => 'left',
        'index' => 'customer_id',
    ));

    $this->addColumn('bookshelf_name', array(
        'header' => Mage::helper('bookshelf')->__('Name'),
        'align' => 'left',
        'index' => 'bookshelf_name',
    ));



    return parent::_prepareColumns();
}





public function getRowUrl($row) {
    return $this->getUrl('*/*/edit', array('id' => $row->getId()));
}
class Newdaymedia_Bookshelf_Block_Adminhtml_Bookshelf extends
Mage_Adminhtml_Block_Widget_Grid_Container
{
public function __construct()
{
$this->_controller = 'bookshelf_admin';
$this->_blockGroup = 'bookshelf';
$this->_headerText = Mage::helper('bookshelf')->__('Item Manager');
$this->_addButtonLabel = Mage::helper('bookshelf')->__('Add Item');
parent::__construct();
}

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

还有这个

class Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Grid extends                Mage_Adminhtml_Block_Widget_Grid {

public function __construct() {
    parent::__construct();
    $this->setId('bookshelf_grid');
    $this->setDefaultSort('bookshelf_id');
    $this->setDefaultDir('desc');
    $this->setSaveParametersInSession(true);
}

protected function _prepareCollection() {
    $collection = Mage::getModel('bookshelf/bookshelf')->getCollection();
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

protected function _prepareColumns() {
    $this->addColumn('bookshelf_id', array(
        'header' => Mage::helper('bookshelf')->__('ID'),
        'align' => 'right',
        'width' => '50px',
        'index' => 'bookshelf_id',
    ));

    $this->addColumn('customer_id', array(
        'header' => Mage::helper('bookshelf')->__('Name'),
        'align' => 'left',
        'index' => 'customer_id',
    ));

    $this->addColumn('bookshelf_name', array(
        'header' => Mage::helper('bookshelf')->__('Name'),
        'align' => 'left',
        'index' => 'bookshelf_name',
    ));



    return parent::_prepareColumns();
}





public function getRowUrl($row) {
    return $this->getUrl('*/*/edit', array('id' => $row->getId()));
}
class Newdaymedia_Bookshelf_Block_Adminhtml_Bookshelf extends
Mage_Adminhtml_Block_Widget_Grid_Container
{
public function __construct()
{
$this->_controller = 'bookshelf_admin';
$this->_blockGroup = 'bookshelf';
$this->_headerText = Mage::helper('bookshelf')->__('Item Manager');
$this->_addButtonLabel = Mage::helper('bookshelf')->__('Add Item');
parent::__construct();
}

protected function _prepareLayout()
 {
   $this->setChild( 'grid',
       $this->getLayout()->createBlock( $this->_blockGroup.'/' . $this->_controller . '_grid',
       $this->_controller . '.grid')->setSaveParametersInSession(true) );
   return parent::_prepareLayout();
 }
}
任何帮助都将受到感激

新的


}

您需要为模块创建一个助手(即使它什么都不做)。在模块的helper目录中创建一个名为Data.php的文件,并在其中创建一个名为Namespace_module_helper_Data的类,该类扩展了Mage_Core_helper_Abstract


我认为这应该有助于解决问题。

假设您的Adminhtml控制器处于 名称空间/ModuleName/controllers/Adminhtml/BookshelfController.php


试试$this->_controller='adminhtml_bookshelf';在表单容器上。这可能会解决您的问题:

在表单容器类中:

Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Edit 
extends Mage_Adminhtml_Block_Widget_Form_Container
如果添加这些测试行,您将看到Magento试图加载哪个表单类

$form_block = $this->_blockGroup . '/' . 
              $this->_controller . '_' . 
              $this->_mode . 
              '_form';
echo $form_block;
为了使其与您的代码(如上)一起工作,您的类:

Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Edit_Form
应回显以下测试值:

bookshelf/adminhtml_bookshelf_edit_form
并应位于以下文件路径中:

app/code/local/Namespace/Bookshelf/Block/Adminhtml/Bookshelf/Edit/Form.php
您可能必须调整类名或文件路径,或两者都调整,才能使其正常工作


祝你好运

必须澄清,$this->\u controller不是实际的控制器名称,而是块类名称,$this->\u blockGroup实际上是模块名称

因此,请尝试:

$this->_blockGroup='namespace_bookshelf'

$this->_controller='adminhtml_bookshelf'


不幸的是,我的扩展已经有了一个助手,不知道是什么导致了这个问题。在/Applications/MAMP/htdocs/theBookClub/app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php中的第129行是什么;签出模块的布局文件。出于某种原因,它正在寻找一个名为form的子元素。我敢打赌有一个名为“form”的元素,但它的块类型没有映射到有效的类,或者没有名为form的子元素。我收到了相同的错误,但想知道为什么您将其标记为绿色,您没有告诉解决方案?很可能您列出的第一个文件有问题,可能是继承问题,如setData()似乎没有定义,我猜是在
getHeaderText
方法中。添加Form.php类为我做到了这一点。这应该被标记为答案。记住也要检查打字错误,因为它们很容易被忽略。如果您确定块类别名正确,请仔细检查
$this->\u blockgroup
vs
$this->\u blockgroup