Today we are going to change Magento default products displaying order. I mean “sort by” field and it’s direction. This article will show how to add a new sorting field, called “Date added” to the products list.
First of all, we need to create a new module. Don’t worry, it is going to be a very simple extension. This way our customization will work after Magento upgrade. So we just need to rewrite Mage_Catalog_Model_Config model class and Mage_Catalog_Block_Product_List_Toolbar block class.
Module configuration file app/code/local/Atwix/Tweaks/etc/config.xml:
<?xml version="1.0"?>
<config>
<modules>
<Atwix_Tweaks>
<version>1.0</version>
</Atwix_Tweaks>
</modules>
<global>
<blocks>
<tweaks>
<class>Atwix_Tweaks_Block</class>
</tweaks>
<catalog>
<rewrite>
<product_list_toolbar>Atwix_Tweaks_Block_Product_List_Toolbar</product_list_toolbar>
</rewrite>
</catalog>
</blocks>
<models>
<catalog>
<rewrite>
<config>Atwix_Tweaks_Model_Catalog_Config</config>
</rewrite>
</catalog>
</models>
</global>
</config>
In Atwix_Tweaks_Block_Product_List_Toolbar we just define default direction, app/code/local/Atwix/Tweaks/Block/Product/List/Toolbar.php:
<?php
class Atwix_Tweaks_Block_Product_List_Toolbar extends Mage_Catalog_Block_Product_List_Toolbar
{
protected $_direction = 'asc';
}
In Atwix_Tweaks_Model_Catalog_Config class we rewrite getAttributeUsedForSortByArray function to add custom sorting fields,
app/code/local/Atwix/Tweaks/Model/Catalog/Config.php:
<?php
class Atwix_Tweaks_Model_Catalog_Config extends Mage_Catalog_Model_Config
{
public function getAttributeUsedForSortByArray()
{
$options = array(
'created_at' => Mage::helper('catalog')->__('Date Added')
);
foreach ($this->getAttributesUsedForSortBy() as $attribute) {
$options[$attribute->getAttributeCode()] = $attribute->getStoreLabel();
}
return $options;
}
}
Note, that you can add your own fields to $options array.
The last step is to enable our module, app/etc/modules/Atwix_Tweaks.xml:
<?xml version="1.0"?>
<config>
<modules>
<Atwix_Tweaks>
<active>true</active>
<codePool>local</codePool>
</Atwix_Tweaks>
</modules>
</config>
Now you can see changes at the frontend.
That’s all for now, stay tuned.
