【问题标题】:Magento Error Call to a member function setCollection() on a non-objectMagento 错误调用非对象上的成员函数 setCollection()
【发布时间】:2010-12-08 08:20:29
【问题描述】:

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

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

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

请有人帮帮我。

【问题讨论】:

  • 文件之前是否以任何其他方式更改过?当我检查源代码第 58 行为空并且第 60 行有 setCollection 表明您的文件中缺少某些内容时。

标签: magento wamp magento-1.4


【解决方案1】:

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 对象中。如果没有集合,您的寻呼机块将(很可能)无法正确呈现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 2015-06-16
    • 2016-02-02
    • 2014-05-06
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多