ylliX - Online Advertising Network

How to sort Magento products by date added as default

Today I had to change Magento default products list sorting to sort by product’s date. In fact we don’t need to sort by date, just by entity_id which is product ID in Magento world. To accomplish this, we need to edit /app/code/core/Mage/Catalog/Block/Product/List.php

You have to find _beforeToHtml() function and change some things inside. First we need to define all available sorting options:

$orders = array('entity_id' => $this->__('Newest'), 'name' => $this->__('Name'), 'price' => $this->__('Price') );

then remove all getters of default sorting and order, and put those:

$toolbar->setAvailableOrders($orders);
$toolbar->setDefaultOrder('entity_id');
$toolbar->setDefaultDirection('desc');

so finally your _beforeToHtml() should looks like this one:

protected function _beforeToHtml()
{

    $toolbar = $this->getToolbarBlock();

    // called prepare sortable parameters
    $collection = $this->_getProductCollection();

    // use sortable parameters
    $orders = array('entity_id' => $this->__('Newest'), 'name' => $this->__('Name'), 'price' => $this->__('Price') );
    $toolbar->setAvailableOrders($orders);

    $toolbar->setDefaultOrder('entity_id');

    $toolbar->setDefaultDirection('desc');

    if ($modes = $this->getModes()) {
        $toolbar->setModes($modes);
    }

    // set collection to tollbar and apply sort
    $toolbar->setCollection($collection);

    $this->setChild('toolbar', $toolbar);
    Mage::dispatchEvent('catalog_block_product_list_collection', array(
        'collection'=>$this->_getProductCollection(),
    ));

    $this->_getProductCollection()->load();
    Mage::getModel('review/review')->appendSummary($this->_getProductCollection());
    return parent::_beforeToHtml();
}

 

9 thoughts on “How to sort Magento products by date added as default

  1. can i provide date option in front end to user to sort the products by date in both asc and desc order.

  2. to add DATE sort option at front end , use following file / code ( I strongly recommend to use LOCAL folder for these changes

    // app/code/core/Mage/Catalog/Model/Config.php

    public function getAttributeUsedForSortByArray()
    {
    $options = array(
    ‘position’ => Mage::helper(‘catalog’)->__(‘Position’),

    // HERE IS OUR NEW OPTION
    ‘created_at’ => Mage::helper(‘catalog’)->__(‘Date’)
    );
    foreach ($this->getAttributesUsedForSortBy() as $attribute) {
    /* @var $attribute Mage_Eav_Model_Entity_Attribute_Abstract */
    $options[$attribute->getAttributeCode()] = $attribute->getStoreLabel();
    }

    return $options;
    }

    and to set DATE as default sorting option, add some sorting code at the end of its _getProductCollection() method:

    // sort by created_at date or entity_id
    if(!isset($_GET[‘order’])) {
    $this->_productCollection->getSelect()->reset( Zend_Db_Select::ORDER );
    $this->_productCollection->getSelect()->order(‘e.entity_id desc’);
    }
    return $this->_productCollection;
    You can use either ‘e.entity_id desc’ or ‘e.created_at desc’ to sort.

  3. Hi,

    i am very impressed to follow your blog but i want to know that how can we know that Product sorting is working properly .if possible to reply me

Leave a Reply