Magento Ошибка вызова функции-члена setCollection () для необъекта - PullRequest
0 голосов
/ 08 декабря 2010

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

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

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

Пожалуйста, кто-нибудь, помогите мне.

1 Ответ

0 голосов
/ 12 декабря 2010

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

...