sort catalogsearch by 2 attributes
-
16-10-2019 - |
문제
How can I sort catalogsearch results by 2 attributes instead of "position" or "relevance" only? Not in toolbar, need to sort by default .. for example, first sort products with "attribute1" and then sort with "attribute2" without changing the toolbar and select any of them?
for more info, I have 4 products:
- 121/24R
- 123/83C
- 123/15H
- 121/55H
I have 2 attributes that first is for 123,121 and another one is for 24,83,15,55
Now I want to sort products results with first attribute in 'asc' and another one in 'desc'?
like this :
- 121/55H
- 121/24R
- 123/83H
- 123/15C
How can I use this method ?
해결책
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;
}
}