Magento - 使用分页加载产品集合

问题描述 投票:0回答:1

我一直在尝试加载产品集合,然后通过将评论 ID 调用到数组中来过滤它,然后应用该过滤器。

我已经附上了下面的代码,该代码位于 List.phtml 的顶部,我通过 list.phtml 的自定义副本运行它,如下所示

<block type="catalog/product_list" name="sale" template="reviewsList/index.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');
?>
php magento magento-1.4 magento-1.5
1个回答
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;
} 

}
© www.soinside.com 2019 - 2024. All rights reserved.