Как в bitrix:catalog.search сделать поиск по нескольким разделам?

Ссылка скопирована
1 ответ

Добрый день! Скажите, пожалуйста, есть такая возможность настроить компонент bitrix:catalog.search чтобы он искал по нескольким разделам каталога?

Дополнительно:

По нескольким - это от двух, до всех, включая дочерние. Если поиск в текущем разделе и надо искать по дочерним разделам - так и пиши. Если это общий компонент поиска по сайту - там всё так и должно работать. Если установлено какое-то решение, типа "аспро" и т.д. - тоже пиши. Если ты не опишешь максимально что тебе нужно и что за решение ты используешь - тут никто даже вникать особо не станет.

  • muscimolus, Спасибо, уточняю

    Делаю такой функционал:

    • находимся на любой странице каталога, указываем в каких категориях искать, если указаны категории в которых искать - ищем по ним, если нет, ищем "по умолчанию"
    • По нескольким - от 1 до всех,
    • Нет никаких решений. Штатный малый бизнес и самописный шаблон.

    То есть интересует как передать в компонент поиска bitrix:catalog.search массив с айдишниками категорий или их section_code

    Либо не в него нужно передавать?
    Пробую передавать такой массив в корневой bitrix:catalog - вывод товаров фильтруется. А поиск все равно идет по всем категориям.
    Добавлял указанием в параметрах вызова компонента
    "FILTER_NAME" => "arrFilter",
    ну и перед вызовом компонента
    $arrFilter['SECTION_CODE'] = ['cat_url1', 'cat_url2'];

  • junior_www, что передаётся в cat_url1? Полная ссылка или частичная ссылка на раздел, или именно символьный код раздела?
  • muscimolus, символьный код раздела
  • junior_www, значит у элементов нет этого свойства, всё просто. Попробуй заменить SECTION_CODE в массиве фильтра на IBLOCK_SECTION_ID или SECTION_ID и передать идентификаторы разделов, а не символьные коды.
  • muscimolus, Спасибо большое!
  • На основе комментариев muscimolus

    Чтобы добавить возможность поиска по категориям можно передать в массив id разделов $arrFilter['IBLOCK_SECTION_ID'] = ['121', '122'];

    и после при вызове в параметрах вызова компонента bitrix:catalog добавить
    "FILTER_NAME" => "arrFilter",

    • советую давать какие-то осмысленные имена. Не arrFilter , а catalogSearchFilter , например. Иначе легко напороться на то, что какой-то другой компонент подхватит ненужный ему фильтр и начнёт работать некорректно
    • Михаил Ливач, Спасибо
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Елена Вебер Ответ

    Для того чтобы осуществить поиск по нескольким разделам в библиотеке 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 разделов, по которым вы хотите осуществлять поиск.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно