Я пытаюсь ограничить количество возвращенных результатов вручную в копии шаблона list.phtml, но его оказывание, намного более трудное, чем, я ожидал.
Я попытался вручную установить размер набора, но ya еще раз ничто работа. Кто-то может показать мне, как сделать это? Был бы ценивший nmuch!
Похоже, что для коллекции, возвращенной в list.phtml, уже был вызван load (), а это означает, что к тому времени, когда мы дойдем до шаблона, мы потеряли возможность установить размер страницы. Итак, это будет немного беспорядочно!
Блок, который генерирует эту коллекцию, - это Mage_Catalog_Block_Product_List
, который мы можем расширить нашим собственным классом и одновременно переопределить. Создайте новый блок, который расширяет Mage_Catalog_Block_Product_List
и переопределите метод _getProductCollection
следующим образом:
/**
* Retrieve loaded category collection
*
* @return Mage_Eav_Model_Entity_Collection_Abstract
*/
protected function _getProductCollection()
{
if (is_null($this->_productCollection)) {
$layer = Mage::getSingleton('catalog/layer');
/* @var $layer Mage_Catalog_Model_Layer */
if ($this->getShowRootCategory()) {
$this->setCategoryId(Mage::app()->getStore()->getRootCategoryId());
}
// if this is a product view page
if (Mage::registry('product')) {
// get collection of categories this product is associated with
$categories = Mage::registry('product')->getCategoryCollection()
->setPage(1, 1)
->load();
// if the product is associated with any category
if ($categories->count()) {
// show products from this category
$this->setCategoryId(current($categories->getIterator()));
}
}
$origCategory = null;
if ($this->getCategoryId()) {
$category = Mage::getModel('catalog/category')->load($this->getCategoryId());
if ($category->getId()) {
$origCategory = $layer->getCurrentCategory();
$layer->setCurrentCategory($category);
}
}
$this->_productCollection = $layer->getProductCollection();
$this->prepareSortableFieldsByCategory($layer->getCurrentCategory());
// OUR CODE MODIFICATION ////////////////////
$yourCustomPage = someFunctionThatDetectsYourCustomPage();
if($yourCustomPage) {
$this->_productCollection->setPageSize(1);
$this->_productCollection->setCurPage(3);
$this->_productCollection->load();
}
/////////////////////////////////////////////
if ($origCategory) {
$layer->setCurrentCategory($origCategory);
}
}
return $this->_productCollection;
}
Важная часть - найти способ определить, используете ли вы настраиваемый list.phtml страница или нет. Затем вам нужно переопределить ссылки на
в макетах с вашим классом, и вы должны быть готовы к работе.
Надеюсь, это поможет!
Спасибо, Джо