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