First, create an extension (in my example it's called Emzee_Sorter) and listen to the event catalog_block_product_list_collection
in your config.xml
:
<?xml version="1.0"?>
<config>
<modules>
<Emzee_Sorter>
<version>1.0.0</version>
</Emzee_Sorter>
</modules>
<global>
<models>
<emzee_sorter>
<class>Emzee_Sorter_Model</class>
</emzee_sorter>
</models>
<events>
<catalog_block_product_list_collection>
<observers>
<emzee_sorter>
<class>emzee_sorter/observer</class>
<method>catalogBlockProductListCollection</method>
</emzee_sorter>
</observers>
</catalog_block_product_list_collection>
</events>
</global>
</config>
Then create the observer class:
<?php
class Emzee_Sorter_Model_Observer
{
/**
* @param Varien_Event_Observer $observer
* @return Emzee_Sorter_Model_Observer
*/
public function catalogBlockProductListCollection(Varien_Event_Observer $observer)
{
$collection = $observer->getEvent()->getCollection();
$collection->addOrder('sort_2', Varien_Data_Collection::SORT_ORDER_DESC);
return $this;
}
}
sort_2
is the attribute containing 55H
and so on. Make sure that you set Used in Product Listing
to Yes
for this attribute so that the attribute can be found when flat catalog is enabled.
This code will sort the products on search results and category pages. If you want to limit the functionality to search results, you can do something like this:
<?php
class Emzee_Sorter_Model_Observer
{
/**
* @param Varien_Event_Observer $observer
* @return Emzee_Sorter_Model_Observer
*/
public function catalogBlockProductListCollection(Varien_Event_Observer $observer)
{
$request = Mage::app()->getFrontController()->getRequest();
$action = $request->getModuleName() . '_' . $request->getControllerName() . '_' . $request->getActionName();
if ($action === 'catalogsearch_result_index' || $action === 'catalogsearch_advanced_result') {
$collection = $observer->getEvent()->getCollection();
$collection->addOrder('sort_2', Varien_Data_Collection::SORT_ORDER_DESC);
}
return $this;
}
}