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