2012-11-09 82 views
0

我得到的錯誤升級後:Magento的:缺少集合Mage_Catalog_Block_Product_List_Toolbar從1.3升級後toolbar.phtml 1.7

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); 

我的問題,爲什麼不是集合被設置?它通常會在哪裏設置?

回答

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作爲父母。

+1

我已經定製了一些核心文件,並完全忘記它,這是其中之一,謝謝! – PieSub