Компонент search.page
Введение
Данная статья описывает реализацию страницы поиска товаров в Битрикс с использованием компонентов search.page и catalog.section.
Решение позволяет организовать поиск по товарам каталога с последующим выводом результатов в виде каталога товаров.
Компонент search.page
Компонент search.page используется для организации поиска по сайту. В данном случае он настроен для поиска в инфоблоках каталога.
Параметры компонента:
<?$APPLICATION->IncludeComponent(
"bitrix:search.page",
"search_catalog",
Array(
"AJAX_MODE" => "N",
"AJAX_OPTION_ADDITIONAL" => "",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"CACHE_TIME" => "3600",
"CACHE_TYPE" => "A",
"CHECK_DATES" => "Y",
"DEFAULT_SORT" => "rank",
"DISPLAY_BOTTOM_PAGER" => "N",
"DISPLAY_TOP_PAGER" => "N",
"FILTER_NAME" => "",
"NO_WORD_LOGIC" => "N",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => "",
"PAGER_TITLE" => "Результаты поиска",
"PAGE_RESULT_COUNT" => "999",
"PATH_TO_USER_PROFILE" => "",
"RATING_TYPE" => "",
"RESTART" => "Y",
"SHOW_RATING" => "",
"SHOW_WHEN" => "N",
"SHOW_WHERE" => "N",
"USE_LANGUAGE_GUESS" => "Y",
"USE_SUGGEST" => "N",
"USE_TITLE_RANK" => "Y",
"arrFILTER" => array("iblock_1c_catalog"),
"arrFILTER_iblock_1c_catalog" => array("22","23"),
"arrWHERE" => array()
)
);?>
Основные параметры:
-
arrFILTER- фильтр по типам инфоблоков -
arrFILTER_iblock_1c_catalog- фильтр по конкретным инфоблокам каталога -
PAGE_RESULT_COUNT- количество результатов на странице -
DEFAULT_SORT- сортировка по релевантности
Модификатор результатов
В файле result_modifier.php происходит обработка результатов поиска:
$arResult['PRODUCT_IDS'] = [];
if (count($arResult['SEARCH'])) {
foreach ($arResult['SEARCH'] as $key => &$arItem) {
if ($arItem['PARAM1'] === '1c_catalog') {
$arResult['PRODUCT_IDS'][] = $arItem['ITEM_ID'];
}
}
}
Здесь формируется массив ID найденных товаров, которые затем используются для фильтрации в компоненте catalog.section.
Шаблон вывода
В template.php реализована логика отображения результатов поиска:
-
Получение информации о покупателе:
use App\Customer; $customer = Customer::getCustomerInfo(); -
Отображение количества найденных элементов
$resCount = count($arResult['PRODUCT_IDS']); < ? // Отображаем кол-во найденных элементов. // Т.к. на данном проекте из 1С летят товары с нулевыми ценами, // то актуальное количество можно получить только из catalog.section ниже, // после выборки с фильтрацией по цене. // поэтому используем отложенные функции. Если это не нужно, пользуйтесь $resCount. if ($resCount > 0) { ? > < div class="search-advanced"> < div class="search-advanced-result"> < div class="search-result"> Найдено: $APPLICATION->ShowViewContent('count_catalog_result_search');?> < /div> < /div> < /div> < ? } ?>
Основные параметры catalog.section:
-
Фильтрация по ID найденных товаров
-
Сортировка по цене
-
Настройки отображения товаров
-
Параметры пагинации
-
Настройки корзины
Особенности реализации
-
Обработка нулевых цен: Реализация учитывает возможность наличия товаров с нулевыми ценами, которые приходят из 1С.
-
Отложенный подсчет: Количество найденных элементов отображается с использованием отложенных функций.
-
Интеграция с системой цен: Используется тип цены покупателя (\$customer['priceType']) для фильтрации и сортировки (несколько типов цен).
-
Гибкая настройка отображения: Компонент catalog.section настроен с учетом различных параметров отображения товаров, включая:
-
Количество товаров на странице
-
Сортировку
-
Отображение цен
-
Настройки корзины
-
-
Оптимизация производительности: Используется кеширование результатов поиска и каталога для повышения производительности.
Примечание
Если в проекте используется только один тип цены, логику с несколькими ценами можно упростить, удалив соответствующие параметры и настройки.