Выдано 130649 лицензий

Сортировка результатов поиска в поисковом модуле

Сортировка результатов поиска в поисковом модуле
#
Seri
753
Результат поиска настроен на поиск только товаров в определенном магазине:
Search_Controller_Show
$Search_Controller_Show->modules(
        array(
            3 => array(array('module_id' => 1, 'module_value_type' => 2))
        )
    );


Поставлено задача, организовать сортировку результатов поиска по наличию товаров. Тогда это в результате первыми показывались товары в наличии, а потом нет в наличии. Для этого сделано нижеследующее:

1. Пишем класс наблюдателя, размещаем его в modules/search/controller/observer.php
class Search_Controller_Observer
{
    static public function onBeforeExecuteFind($object, $args)
    {
        $args[1]
            ->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'search_pages.module_value_id')
            ->groupBy('search_pages.module_value_id')
            ->clearOrderBy()
            ->orderBy(Core_QueryBuilder::expression('SIGN(SUM(`shop_warehouse_items`.`count`))'), 'DESC');
    }
}


2. Добавляем наблюдателя в bootstrap.php
Core_Event::attach('Search_Controller_Hostcms.onBeforeExecuteFind', array('Search_Controller_Observer', 'onBeforeExecuteFind'));


Спасибо поддержке HostCMS
E-mail: info@syrbek.ru / skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Авторизация