А вот и примерчик:
В ТДС "Интернет-Магазин" перед вызовом метода 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}"/>