ограничивающее количество магнето возвращенных объектов в вызове набора продукта

Я пытаюсь ограничить количество возвращенных результатов вручную в копии шаблона list.phtml, но его оказывание, намного более трудное, чем, я ожидал.

Я попытался вручную установить размер набора, но ya еще раз ничто работа. Кто-то может показать мне, как сделать это? Был бы ценивший nmuch!

11
задан Jonathan Day 19 April 2011 в 00:43
поделиться

1 ответ

Похоже, что для коллекции, возвращенной в 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 страница или нет. Затем вам нужно переопределить ссылки на в макетах с вашим классом, и вы должны быть готовы к работе.

Надеюсь, это поможет!

Спасибо, Джо

2
ответ дан 3 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: