Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento-对非对象调用成员函数createBlock()_Magento - Fatal编程技术网

Magento-对非对象调用成员函数createBlock()

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

简单地说,在添加了一个新的编辑选项卡后,我在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 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());
    }

    // ...
}