2011-10-26 97 views
2

我一直在嘗試加載產品集合,然後通過將數組中的評論ID調用並將其應用於該過濾器來過濾它。Magento - 分頁加載產品收集

我隨信附上下面的代碼是在我運行它通過list.phtml自定義副本,像這樣

<block type="catalog/product_list" name="sale" template="reviewsList/index.phtml"> 

好消息List.phtml的頂部是,收集將加載,但它打破了分頁。如果任何人有任何想法會很棒。

下面的完整代碼。

任何幫助非常感謝。

<?php 
$reviewCollection = Mage::getModel('review/review')->getCollection()->addStoreFilter(Mage::app()->getStore()->getId())->addRateVotes()->setDateOrder(); 
$reviewArray = array(); 
foreach ($reviewCollection->getItems() as $thisReview):   
    array_push($reviewArray, $thisReview->getEntityPkValue()); 
endforeach; 

$_productCollection = Mage::getModel('catalog/product')->getCollection()->addAttributeToFilter('entity_id', array('in' => $reviewArray))->addAttributeToSelect('*')->setPageSize(5); 

$_productCollection = $_productCollection->load(); 

//$_productCollection=$this->getLoadedProductCollection(); 
$_helper = $this->helper('catalog/output'); 
?> 

回答

0

要顯示分頁,您可以在列表視圖中添加工具欄。我在這裏爲品牌做了一個分類基礎的收集。您可以修改此代碼以適合您的收藏。

class Mage_Catalog_Block_Product_Brandsnew extends Mage_Catalog_Block_Product_Abstract 
{ 
protected $_productsCount = null; 

const DEFAULT_PRODUCTS_COUNT = 5; 

/** 
* Initialize block's cache 
*/ 
protected function _construct() 
{ 
    parent::_construct(); 

    $this->addColumnCountLayoutDepend('empty', 6) 
     ->addColumnCountLayoutDepend('one_column', 5) 
     ->addColumnCountLayoutDepend('two_columns_left', 4) 
     ->addColumnCountLayoutDepend('two_columns_right', 4) 
     ->addColumnCountLayoutDepend('three_columns', 3); 

    $this->addData(array(
     'cache_lifetime' => 86400, 
     'cache_tags'  => array(Mage_Catalog_Model_Product::CACHE_TAG), 
    )); 
} 

/** 
* Get Key pieces for caching block content 
* 
* @return array 
*/ 
public function getCacheKeyInfo() 
{ 
    return array(
     'CATALOG_PRODUCT_NEW', 
     Mage::app()->getStore()->getId(), 
     Mage::getDesign()->getPackageName(), 
     Mage::getDesign()->getTheme('template'), 
     Mage::getSingleton('customer/session')->getCustomerGroupId(), 
     'template' => $this->getTemplate(), 
     $this->getProductsCount() 
    ); 
} 

/** 
* Prepare collection with new products and applied page limits. 
* 
* return Mage_Catalog_Block_Product_New 
*/ 
protected function _beforeToHtml() 
{ 
$toolbar = $this->getToolbarBlock(); 
//$todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT); 
    $collection = Mage::getResourceModel('catalog/product_collection') 
     ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes()) 
     ->addMinimalPrice() 
     ->addStoreFilter() 
     ->addAttributeToFilter('manufacturer',$this->getRequest()->manufacturer); 
    Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection); 
    Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection); 

    //$collection->addAttributeToFilter('special_price' ,array('neq' => '')); 

    // use sortable parameters 
    if ($orders = $this->getAvailableOrders()) { 
     $toolbar->setAvailableOrders($orders); 
    } 
    if ($sort = $this->getSortBy()) { 
     $toolbar->setDefaultOrder($sort); 
    } 
     if (isset($_GET['p'])) { 

     $toolbar->setLimit($toolbar->getLimit()); 
    } 

    $this->setProductCollection($collection); 

    $toolbar->setCollection($collection); 

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

    $collection->load(); 
    return parent::_beforeToHtml(); 


} 

/** 
* Set how much product should be displayed at once. 
* 
* @param $count 
* @return Mage_Catalog_Block_Product_New 
*/ 
public function setProductsCount($count) 
{ 
    $this->_productsCount = $count; 
    return $this; 
} 

/** 
* Get how much products should be displayed at once. 
* 
* @return int 
*/ 
public function getProductsCount() 
{ 
    if (null === $this->_productsCount) { 
     $this->_productsCount = self::DEFAULT_PRODUCTS_COUNT; 
    } 
    return $this->_productsCount; 
} 


/** 
* Retrieve Toolbar block 
* 
* @return Mage_Catalog_Block_Product_List_Toolbar 
*/ 
public function getToolbarBlock() 
{ 
    if ($blockName = $this->getToolbarBlockName()) { 
     if ($block = $this->getLayout()->getBlock($blockName)) { 
      return $block; 
     } 
    } 
    $block = $this->getLayout()->createBlock($this->_defaultToolbarBlock, microtime()); 
    return $block; 
} 

public function setCollection($collection) 
{ 
    $this->_productCollection = $collection; 
    return $this; 
} 

}