0

アップグレード後、次のエラーが発生しました。

Fatal error: Call to a member function getSize() on a non-object in ./app/design/frontend/base/default/template/catalog/product/list/toolbar.phtml on line 34

問題のある行:<?php if($this->getCollection()->getSize()): ?>

簡単なデバッグを行った後、getCollection が null を返していることがわかりました。回避策として、コレクションを手動で設定しました。

$collection = Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect('*');
$this->setCollection($collection);

私の質問は、コレクションが設定されていないのはなぜですか? 通常はどこに設定されますか?

4

1 に答える 1

1

通常、親catalog/product_listブロックの_beforeToHtmlメソッドで設定されます。

#File: app/code/core/Mage/Catalog/Block/Product/List.php
protected function _beforeToHtml()
{
    $toolbar = $this->getToolbarBlock();

    // called prepare sortable parameters
    $collection = $this->_getProductCollection();

    // use sortable parameters
    if ($orders = $this->getAvailableOrders()) {
        $toolbar->setAvailableOrders($orders);
    }
    if ($sort = $this->getSortBy()) {
        $toolbar->setDefaultOrder($sort);
    }
    if ($dir = $this->getDefaultDirection()) {
        $toolbar->setDefaultDirection($dir);
    }
    if ($modes = $this->getModes()) {
        $toolbar->setModes($modes);
    }

    // set collection to toolbar and apply sort
    $toolbar->setCollection($collection);

    $this->setChild('toolbar', $toolbar);
    Mage::dispatchEvent('catalog_block_product_list_collection', array(
        'collection' => $this->_getProductCollection()
    ));

    $this->_getProductCollection()->load();

    return parent::_beforeToHtml();
}

具体的にはこの行。

$toolbar->setCollection($collection);

catalog/product_list私の推測では、システムが大幅に変更され、ツールバー ブロックが親として存在しなくなった可能性があります。

于 2012-11-09T07:56:24.063 に答える