Magento错误调用非对象上的成员函数setCollection()

时间:2010-12-08 08:20:30

标签: magento wamp magento-1.4

我的Magento有问题。当我登录并查看我的订单页面时,会显示以下错误:

  

致命错误:在第58行的C:\ wamp \ www \ danfemall \ app \ code \ core \ Mage \ Sales \ Block \ Order \ History.php中的非对象上调用成员函数setCollection()< / p>

当我从代码中删除setCollection函数时,它运行良好,但我想知道setCollection函数是做什么的,并且从代码中删除该函数是明智的。

请有人帮助我。

1 个答案:

答案 0 :(得分:0)

Magento版本号在调试Mangeto问题时总能提供帮助。另外,android(你的标签)适合哪里?

假设以下行是导致系统出现问题的行

$pager = $this->getLayout()->createBlock('page/html_pager', 'sales.order.history.pager')
    ->setCollection($this->getOrders());

Magento正在尝试创建一个page/html_pager块对象(假设没有覆盖,对应于Mage_Page_Block_Html_Pager)。

在一个工作系统中,通过以下调用完成。

$this->getLayout()->createBlock('page/html_pager', 'sales.order.history.pager')

返回Block对象,然后调用Block的setCollection方法

->setCollection($this->getOrders());

但是,在你的系统中,createBlock方法没有返回一个对象,我的猜测是它返回一个布尔值。看一下Layout类的createBlock方法的开头。

#File: app/code/core/Mage/Core/Model/Layout.php
public function createBlock($type, $name='', array $attributes = array())
{
    try {
        $block = $this->_getBlockInstance($type, $attributes);
    } catch (Exception $e) {
        Mage::logException($e);
        return false;
    }

因此,您的系统已被更改或配置为尝试创建page/html_pager块的方式正在抛出异常。检查您的Magento异常日志以查看正在记录的错误类型,或者只是暂时放入var_dump

try {
    $block = $this->_getBlockInstance($type, $attributes);
} catch (Exception $e) {
    var_dump($e->getMessage()); //don't forget to remove me before pushing 
                                //to production
    Mage::logException($e);
    return false;
}

对于此代码的作用以及它将如何影响您的系统,setCollection方法会向Block对象添加一个集合对象(类似于模型对象的数组)。如果没有集合,您的寻呼机块(很可能)将无法正确呈现。