Ошибка Magento Вызов функции-члена setCollection() для необъекта

У меня проблема с моим Magento. Когда я вхожу в систему и просматриваю страницу своих заказов, отображается следующая ошибка:

Неустранимая ошибка: вызов функции-члена setCollection() для не-объекта в C:\wamp\www\danfemall\app\code\core\Mage\Sales\Block\Order\History.php в строке 58

Когда я удаляю функцию setCollection из кода, она работает хорошо, но мне интересно, что делает функция setCollection, и разумно ли удалять эту функцию из кода.

Пожалуйста, помогите мне.


person Abiral Shakya    schedule 08.12.2010    source источник
comment
Был ли файл ранее изменен каким-либо другим образом? Когда я проверяю исходную строку 58, она пуста, а в строке 60 есть setCollection, что говорит о том, что в вашем файле чего-то не хватает.   -  person clockworkgeek    schedule 11.12.2010


Ответы (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, а затем вызывается метод setCollection блока

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

Однако в вашей системе метод createBlock не возвращает объект, и я предполагаю, что он возвращает логическое значение. Взгляните на начало метода createBlock класса Layout.

#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. Без коллекции ваш блок пейджера (скорее всего) не будет отображаться правильно.

person Alan Storm    schedule 11.12.2010