Поиск и фильтр

#
Поиск и фильтр
Задача: Сделать поиск по сайту. После того как нашло нужный список, нужно сделать фильтр по производителю цене и количеству на странице. Фактически тоже что есть в каталоге товаров только без дополнительных свойств!
Skype:ferdinant1988 ICQ:311960596 E-mail: ferdinant@i.ua
#
Re: Поиск и фильтр
ferdinant, вам нужно перенести функционал поиска по магазину в ТДС магазина, и там сделать отбор id нужных товаров по поисковому слову (в этом вам поможет метод SearchWords из класса Search) а потом передать список этих id как еще один фильтр, используя SQL-конструкцию IN ()

Где-то у меня был примерчик на эту тему, поищу.

Это все, разумеется, не на "Халяве", но на любых платных редакциях, в которых есть модуль Поиск.
Заказов не беру. Консультирую редко.
#
Re: Поиск и фильтр
А вот и примерчик:

В ТДС "Интернет-Магазин" перед вызовом метода ShowShop() необходимо вставить следующий код:

// тут обработаем поисковый запрос, если он есть

if (isset($_GET['searchtext']) && to_str($_GET['searchtext']) != '') {

    $words = to_str($_GET['searchtext']);

    $search_property = array();

    // здесь цифра 3 означает что поиск идет только по интернет-магазинам,
    // а цифра 2 - что поиск идет только по сущностям (товарам) а не группам
    // подробнее см. документацию по методу SearchWords() класса Search()
    $search_property['search_page_module'] = array(3 => array($current_shop_id,
        array('search_page_module_value_type' => 2)));

    $search_property['order_field'] = 0; //0 - по релевантности, 1 - по дате. Тут нам, вообще-то пофиг, потому что при отображении каталога товаров эта сортировка все-равно не будет видна
    $search_property['order_direction'] = 'DESC'; // да и тут пофиг.

    $search_property['site_id'] = CURRENT_SITE;

    $search_property['items_on_page'] = 999; // ограничим максимальное число товаров, теоретически попадающих в результаты поиска.
    // Пагинация, исключение неактивных товаров, и прочие дополнительные плюшки обеспечиваются методом ShowShop(),
    // здесь нам важно получить максимальную выборку релевантных товаров.

    $search_property['current_page'] = 1; / всегда 1!
    $search_property['site_user_id'] = $site_user_id;

    $Search = &singleton('Search');
    $search_result = $Search->SearchWords($words, $search_property);


    $filtered_items = array();

    if (is_array($search_result)) {
        foreach ($search_result as $found_item) {
            if (isset($found_item['search_page_module_value_id']))
                $filtered_items[] = $found_item['search_page_module_value_id'];
        }
    }

    if (sizeof($filtered_items)) {

        $filtered_items_string = implode(', ', $filtered_items);

        $element = array();
        $element['type'] = 0;
        $element['prefix'] = ' and ';
        $element['name'] = 'shop_items_catalog_item_id';
        $element['if'] = '';
        $element['value'] = '';
        $element['sufix'] = " IN ({$filtered_items_string})";
        $param['select'][] = $element;

        // если надо искать по всему магазину а не по конкретной группе
        // то раскомментируйте следующую строку
        //$param['current_group_id'] = false;

        $external_propertys['searchtext'] = $words;

    }
}
// КОНЕЦ - тут обработаем поисковый запрос, если он есть

А в XSL-шаблоне "МагазинКаталогТоваров" в форму с фильтрами по цене, производителю и доп.свойствам необходимо добавить поле ввода для запроса:
<input type="text" name="searchtext" value="{/shop/searchtext}"/>
Заказов не беру. Консультирую редко.
#
Re: Поиск и фильтр
А как объединить этот поиск с фильтром и сортировкой, сейчас если задать в поисковой строке значение и ввести в поле цена от 100 до 1000 то вылазит ошибка
Ошибка выполнения запроса! - Column 'shop_items_catalog_item_id' in where clause is ambiguous
Предупреждение: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource в файле /home/d/dommeb/public_html/modules/shop/shop.class.php (строка 23624)
Ошибка выполнения запроса! - Column 'shop_items_catalog_item_id' in where clause is ambiguous

А при применении сортировки результат поиска сбрасываеться
kislorod
#
Re: Поиск и фильтр
o2k, в приведенном выше коде замените строку
$element['name'] = 'shop_items_catalog_item_id';
на
$element['name'] = 'shop_items_catalaog_table.shop_items_catalog_item_id';
Заказов не беру. Консультирую редко.
Авторизация