Magento — загрузить коллекцию продуктов с нумерацией страниц

#magento #magento-1.4 #magento-1.5

#magento #magento-1.4 #magento-1.5

Вопрос:

Я пытался загрузить коллекцию продуктов, а затем отфильтровать ее, вызвав идентификаторы обзора в массив, а затем применив к нему этот фильтр.

Я приложил приведенный ниже код, который находится в верхней части 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');
?>
  

Ответ №1:

Чтобы отобразить нумерацию страниц, вы можете добавить панель инструментов в виде списка. Я сделал это здесь для брендов, коллекция на основе категорий. Вы можете изменить этот код в соответствии с вашей коллекцией.

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

}