2011-10-26 8 views
2

私は製品コレクションをロードし、レビューIDを配列に呼び出してそのフィルタを適用することでフィルタリングしようとしていました。Magento - ページ区切り付きの製品コレクションをロードする

私は良いニュースがあることであるので、

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

ようlist.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; 
} 

} 
関連する問題