Magento-对非对象调用成员函数createBlock()
简单地说,在添加了一个新的编辑选项卡后,我在Magento的产品管理员中遇到了这个错误Magento-对非对象调用成员函数createBlock(),magento,Magento,简单地说,在添加了一个新的编辑选项卡后,我在Magento的产品管理员中遇到了这个错误 Fatal error: Call to a member function createBlock() on a non-object in /var/www/app/code/local/RedoxStudios/ErpTab/Block/Adminhtml/Catalog/Product/Tab.php on line 11 在我的代码中有这样的内容: <?php class RedoxStud
Fatal error: Call to a member function createBlock() on a non-object in
/var/www/app/code/local/RedoxStudios/ErpTab/Block/Adminhtml/Catalog/Product/Tab.php
on line 11
在我的代码中有这样的内容:
<?php
class RedoxStudios_ErpTab_Block_Adminhtml_Catalog_Product_Tab
extends Mage_Adminhtml_Block_Template
implements Mage_Adminhtml_Block_Widget_Tab_Interface {
/*
* Set the template for the block
*/
public function __construct() {
parent::__construct();
$this->getLayout()->createBlock('Purchase/Product_Widget_StockDetails_Summary');
$this->setProduct($this->getProduct());
$this->setTemplate('Purchase/Product/StockDetails/Summary.phtml');
}
/**
* Return current product instance
*
* @return Mage_Catalog_Model_Product
*/
public function getProduct()
{
return Mage::registry('product');
}
}
您没有正确获取布局对象(Mage\u Core\u Model\u layout
)。在动作控制器和块中,它是$this->getLayout()->createBlock()
,在其他地方它是Mage::app()->getLayout()->createBlock()
编辑:Sergy还指出布局对象未加载,这使我意识到您使用的是php\uu构造()
,而不是典型的Magento\u构造()
。块实例在Mage\u Core\u Model\u layout::createBlock()
中实例化(并且调用了它们的构造函数)之后才设置布局对象-请注意,在该方法中,块实例如何通过其setLayout()
方法获得布局集。这就是block方法\u prepareLayout()
背后的目的-它是一个类似构造函数的方法,在创建块实例后激发
以下代码更正:
<?php
class RedoxStudios_ErpTab_Block_Adminhtml_Catalog_Product_Tab
extends Mage_Adminhtml_Block_Template
implements Mage_Adminhtml_Block_Widget_Tab_Interface {
/*
* Set the template for the block
*/
protected function _construct()
{
$this->setTemplate('Purchase/Product/StockDetails/Summary.phtml');
}
public function _prepareLayout()
{
$this->getLayout()->createBlock('Purchase/Product_Widget_StockDetails_Summary');
$this->setProduct($this->getProduct());
}
// ...
}
但他是在block类中完成的,不是吗?看起来这个block没有设置布局。Mage::app()->getLayout()将返回为当前句柄加载的布局。@Sergy部分正确。布局尚未设置(更新上面的答案),但Mage::app()->getLayout()
只是一个管理块的对象实例;在Mage\u Core\u Model\u Layout\u Update
的帮助下,可以使用手柄添加块,也可以不使用手柄添加块。您好Ben/Sergy,谢谢您的支持。不再出现错误,但问题是现在根本没有加载数据。没有收到任何错误,但似乎未正确处理_preparelayout函数或任何包含的数据。添加它,删除它;没有区别。我添加了Summary.phtml,那里的所有值都保持为空。
<?php
class RedoxStudios_ErpTab_Block_Adminhtml_Catalog_Product_Tab
extends Mage_Adminhtml_Block_Template
implements Mage_Adminhtml_Block_Widget_Tab_Interface {
/*
* Set the template for the block
*/
protected function _construct()
{
$this->setTemplate('Purchase/Product/StockDetails/Summary.phtml');
}
public function _prepareLayout()
{
$this->getLayout()->createBlock('Purchase/Product_Widget_StockDetails_Summary');
$this->setProduct($this->getProduct());
}
// ...
}