Prodykty w promocji a paginator

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.

Tags: ,

Ten wpis został dodany w Czwartek 23 lutego 2012. Możesz śledzić odpowiedzi do tego wpisu poprzez RSS 2.0. Zarówno komentarze i pingi są obecnie zamknięte.

Komentarze są zamknięte.