Поиск по свойству типа "привязка к элементам"
Вообще-то Битрикс умеет искать по таким свойствам.
Проблема только в том, что в поле ввода для поиска нужно вводить ID элемента, чего обычный пользователь сделать не в состоянии.
Одно из решений - настроить ссылки с привязанных элементов на форму поиска, и сделать, чтобы находились нужные значения.
В примере - к книгам привязано издательство (это отдельный инфоблок), и нужно уметь находить книги по ссылке издательство.
Для этого:
1. В настройках компонента catalog.filter или store.catalog.filter в источнике данных указываем нужное свойство (publisher).
2. В result_modifier.php компонента добавляем код обработки нашего этого свойства:
3. В настройках привязанного инфоблока (в издательствах, а не книгах) указываем нужный URL страницы детального просмотра:
#SITE_DIR#/catalog/search_results.php?arrFilter_pf%5Bpublisher%5D=#ID#&set_filter=Y
где search_results.php - страница с результатами поиска (или страница с комплексным компонентом, если для поиска используется именно он).
Вообще-то Битрикс умеет искать по таким свойствам.
Проблема только в том, что в поле ввода для поиска нужно вводить ID элемента, чего обычный пользователь сделать не в состоянии.
Одно из решений - настроить ссылки с привязанных элементов на форму поиска, и сделать, чтобы находились нужные значения.
В примере - к книгам привязано издательство (это отдельный инфоблок), и нужно уметь находить книги по ссылке издательство.
Для этого:
1. В настройках компонента catalog.filter или store.catalog.filter в источнике данных указываем нужное свойство (publisher).
2. В result_modifier.php компонента добавляем код обработки нашего этого свойства:
<?
CModule::IncludeModule('iblock');
foreach ($arResult["ITEMS"] as &$v) {
if ($v['INPUT_NAME'] == 'arrFilter_pf[publisher]') {
// не показываем поле ввода
$v['INPUT'] = '';
// если передано значение, и найден нужный элемент, то показываем имя элемента и передаем его ID через hidden-поле.
if ($v['INPUT_VALUE'] && ($t = GetIBlockElement($v['INPUT_VALUE']))) {
$v['INPUT'] = '<b>'.$t['NAME'].'</b><input type="hidden" name="'.$v['INPUT_NAME'].'" value="'.$v['INPUT_VALUE'].'">';
// если значения нет, не показываем ничего
} else {$v['HIDDEN'] = true;}
}
}
?> |
3. В настройках привязанного инфоблока (в издательствах, а не книгах) указываем нужный URL страницы детального просмотра:
#SITE_DIR#/catalog/search_results.php?arrFilter_pf%5Bpublisher%5D=#ID#&set_filter=Y
где search_results.php - страница с результатами поиска (или страница с комплексным компонентом, если для поиска используется именно он).