Monday, August 22, 2016

Unset Sorting & Disable Cache for Newest Product Category

Recently we had a requirement to always show a particular Sorting Option (Newest Products - news_from_date) for a particular category page. (New Products)


We faced two issues.

(1) Sorting is Not always set to "newest products" sorting option when pointing back from different category.

This occurs when a customer selects a different sorting option on different category and moving back to Newest Product Category, products will sort according to the previously selected sorting option.

(2) Sorting is Not reset even after clearing parameters passing in Url on Newest Product Category.

Ex:
http://site_url/newest/?dir=asc&order=position

Even after clearing the GET params passing over URL, the sorting is Not reset for "newest_from_date" option.

These issue are specific to Magento Enterprise edition.

We can simply overcome the above two issues with following development.

In app/code/local/<package>/<module_name>/etc/config.xml file:
(app/code/local/ISM/New/etc/config.xml)
 <config>   
    <frontend>
        <events>
            <core_block_abstract_to_html_before>
                <observers>
                    <ism_sorting_new_category>
                        <class>ism_new/observer</class>
                        <method>unsetSortingNewCategory</method>
                    </ism_sorting_new_category>
                </observers>
            </core_block_abstract_to_html_before>
            <controller_action_postdispatch_catalog_category_view>
                <observers>
                    <ism_disable_cache_for_new_category>
                        <class>ism_new/observer</class>
                        <method>disableCacheForNewCategory</method>
                    </ism_disable_cache_for_new_category>
                </observers>
            </controller_action_postdispatch_catalog_category_view>
        </events>
    </frontend>
</config>


In app/code/local/<package>/<module_name>/Model/Observer.php file:
(app/code/local/ISM/New/Model/Observer.php)
/** 
* Disable parameter memorizing and unset sorting order & category for New(Nieuwe) category 
* @param Varien_Event_Observer $observer 
* @return $this 
*/
public function unsetSortingNewCategory(Varien_Event_Observer $observer)
{
    $block = $observer->getBlock();
    if ($block instanceof Mage_Catalog_Block_Product_List) {
        $category = Mage::registry('current_category');
        if ($category && $category->getDefaultSortBy() == 'news_from_date') {
            $sortingOrder = Mage::app()->getRequest()->getParam('order', false);
            $sortingDirection = Mage::app()->getRequest()->getParam('dir', false);

            if (!$sortingOrder && !$sortingDirection) {
                Mage::getSingleton('catalog/session')->unsSortOrder();
                Mage::getSingleton('catalog/session')->unsSortDirection();
            }
        }
    }

    return $this;
}

/** 
* Disable Cache for New (Nieuwe) category 
* @param Varien_Event_Observer $observer 
* @return $this 
*/
public function disableCacheForNewCategory(Varien_Event_Observer $observer)
{
    $category = Mage::registry('current_category');

    if ($category && $category->getDefaultSortBy() == 'news_from_date') {
        $request = $observer->getEvent()->getControllerAction()->getRequest();
        $request->setParam('no_cache', true);
    }

    return $this;
}




No comments:

Post a Comment