Как в bitrix:catalog.search сделать поиск по нескольким разделам?
Добрый день! Скажите, пожалуйста, есть такая возможность настроить компонент bitrix:catalog.search чтобы он искал по нескольким разделам каталога?
Дополнительно:
По нескольким - это от двух, до всех, включая дочерние. Если поиск в текущем разделе и надо искать по дочерним разделам - так и пиши. Если это общий компонент поиска по сайту - там всё так и должно работать. Если установлено какое-то решение, типа "аспро" и т.д. - тоже пиши. Если ты не опишешь максимально что тебе нужно и что за решение ты используешь - тут никто даже вникать особо не станет.
Делаю такой функционал:
- находимся на любой странице каталога, указываем в каких категориях искать, если указаны категории в которых искать - ищем по ним, если нет, ищем "по умолчанию"
- По нескольким - от 1 до всех,
- Нет никаких решений. Штатный малый бизнес и самописный шаблон.
То есть интересует как передать в компонент поиска bitrix:catalog.search массив с айдишниками категорий или их section_code
Либо не в него нужно передавать?
Пробую передавать такой массив в корневой bitrix:catalog - вывод товаров фильтруется. А поиск все равно идет по всем категориям.
Добавлял указанием в параметрах вызова компонента
"FILTER_NAME" => "arrFilter",
ну и перед вызовом компонента
$arrFilter['SECTION_CODE'] = ['cat_url1', 'cat_url2'];
На основе комментариев muscimolus
Чтобы добавить возможность поиска по категориям можно передать в массив id разделов $arrFilter['IBLOCK_SECTION_ID'] = ['121', '122'];
и после при вызове в параметрах вызова компонента bitrix:catalog добавить
"FILTER_NAME" => "arrFilter",
- советую давать какие-то осмысленные имена. Не arrFilter , а catalogSearchFilter , например. Иначе легко напороться на то, что какой-то другой компонент подхватит ненужный ему фильтр и начнёт работать некорректно
- Михаил Ливач, Спасибо
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы осуществить поиск по нескольким разделам в библиотеке Bitrix, вы можете воспользоваться следующим способом:
1. Необходимо создать массив с ID разделов, по которым вы хотите осуществлять поиск.
```php
$sectionIds = array(1, 2, 3); // ID разделов, по которым будет осуществляться поиск
```
2. Затем, используйте функцию `CIBlockSection::GetList` для получения списка разделов и их подразделов, которые вы хотите включить в поиск.
```php
$sectionIds = array(1, 2, 3); // ID разделов, по которым будет осуществляться поиск
$arFilter = array(
'IBLOCK_ID' => $iblockId, // ID вашего инфоблока
'GLOBAL_ACTIVE' => 'Y',
'ID' => $sectionIds,
);
$arSelect = array('ID', 'IBLOCK_SECTION_ID');
$rsSections = CIBlockSection::GetList(array('LEFT_MARGIN' => 'ASC'), $arFilter, false, $arSelect);
while ($arSection = $rsSections->GetNext()) {
$sectionIds[] = $arSection['ID'];
}
```
3. Далее, используйте функцию `CIBlockElement::GetList` для выполнения поискового запроса.
```php
$sectionIds = array(1, 2, 3); // ID разделов, по которым будет осуществляться поиск
$arFilter = array(
'IBLOCK_ID' => $iblockId, // ID вашего инфоблока
'SECTION_ID' => $sectionIds,
'ACTIVE' => 'Y',
);
$arSelect = array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL');
$rsElements = CIBlockElement::GetList(array('SORT' => 'ASC'), $arFilter, false, false, $arSelect);
while ($arElement = $rsElements->GetNext()) {
// Вывод результатов поиска
echo '' . $arElement['NAME'] . '
';
}
```
Этот код позволит вам осуществлять поиск по нескольким разделам в библиотеке Bitrix. Не забудьте заменить переменные `$iblockId` на ID вашего инфоблока и `$sectionIds` на ID разделов, по которым вы хотите осуществлять поиск.