W internecie można znaleźć wiele rozwiązań tego problemu niestety większości ma podstawową wadę związana z źle działającym paginatorem lub wcale niedziałającym paginatorem.
Najprostszym sposobem na stworzenie strony z produktami w promocji i z działającym paginatorem jest skorzystanie z Magentowego CMS-a i cech produktów :
- Special Price From Date
- Special Price To Date
Lecz najpierw musimy stożyć plik który będzie odpowiedzialny za pobieranie takich produktów z naszego magento. Zakładamy nowy plik :
/app/code/local/Mage/Catalog/Block/Product/List/Promotion.php
Do pliku kopiujemy poniższy kod :
_productCollection)) {
$layer = $this->getLayer();
/* @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);
}
}
$todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
$this->_productCollection = $this->_addProductAttributesAndPrices($layer->getProductCollection())
->addStoreFilter()
->addAttributeToFilter('special_from_date', array('or'=> array(
0 => array('date' => true, 'to' => $todayDate),
1 => array('is' => new Zend_Db_Expr('null')))
), 'left')
->addAttributeToFilter('special_to_date', array('or'=> array(
0 => array('date' => true, 'from' => $todayDate),
1 => array('is' => new Zend_Db_Expr('null')))
), 'left')
->addAttributeToFilter(
array(
array('attribute' => 'special_from_date', 'is'=>new Zend_Db_Expr('not null')),
array('attribute' => 'special_to_date', 'is'=>new Zend_Db_Expr('not null'))
)
)
;
$this->prepareSortableFieldsByCategory($layer->getCurrentCategory());
if ($origCategory) {
$layer->setCurrentCategory($origCategory);
}
}
return $this->_productCollection;
}
}
Następnie w CMS-ie zakładamy nową stronę z Promocjami, przechodzimy do zakładki wygląd i w pole „Uaktualnienie układu XML” wstawiamy
0 product_list_toolbar
Ważne jest aby jako category_id podać id naszej głównej kategorii zazwyczaj jest to 0. Kategoria ta powinna również być ustawiona jako „Is Anchor”, jest to ważne jeżeli będziemy chcieli korzystać z filtra warstwowego na naszej stronie Promocji.
Od tego momentu na naszej stronie promocji będą wyświetlały się produkty oznaczone przez cechy : Special Price From Date i Special Price To Date.