Поиск на сайте через компоненты

Стандартные компоненты модуля search превращают поисковый индекс в готовый интерфейс сайта. Компоненты поиска документов принимают запрос посетителя, ограничивают область поиска, проверяют доступ к документам и передают подготовленную выдачу в шаблон. Подсказки поисковых фраз общие для сайта или области поиска и не фильтруются по правам пользователя. Механизм сокращает объем собственного кода и сохраняет единое поведение поиска на разных страницах.

Компоненты подходят для публичной части, когда сайту нужны форма, результаты, подсказки или теги. Для собственного формата ответа и сложной обработки результатов используйте PHP API модуля на основе класса CSearch. Выбрать подходящую точку входа поможет статья Введение и выбор способа поиска.

Выбрать компоненты

Каждый компонент решает отдельную задачу. Для обычной страницы поиска достаточно bitrix:search.page. Дополнительную форму можно разместить в шапке или другом общем блоке сайта.

Компонент

Задача

Источник данных

bitrix:search.form

Показывает форму и отправляет параметр q на страницу результатов

Не выполняет поиск

bitrix:search.page

Показывает форму, результаты, ошибки запроса и постраничную навигацию

Документы поискового индекса

bitrix:search.title

Ищет документы по заголовкам во время ввода

Заголовки документов поискового индекса

bitrix:search.suggest.input

Предлагает ранее использованные поисковые фразы

Данные CSearchSuggest

bitrix:search.tags.input

Дополняет ввод названиями тегов

Теги поискового индекса

bitrix:search.tags.cloud

Показывает популярные или недавние теги

Теги поискового индекса

Компоненты bitrix:search.title и bitrix:search.suggest.input выглядят похоже, но дают разные результаты. Первый помогает сразу перейти к найденному документу. Второй дополняет поисковую фразу и затем передает ее на обычную страницу результатов.

Перед подключением прочитайте статью Компоненты, чтобы выбрать шаблон и передать параметры в $APPLICATION->IncludeComponent().

Собрать страницу поиска

Базовый сценарий состоит из страницы результатов и необязательной формы в общем шаблоне сайта. Оба компонента передают запрос через параметр q, поэтому дополнительный обработчик формы не нужен.

Подготовьте сайт перед подключением компонентов.

  • Установите модуль search.

  • Проверьте, что модули-источники передали документы текущего сайта в поисковый индекс. Для первого заполнения запустите полную переиндексацию. Пустой индекс не даст результатов даже при правильных параметрах компонента.

  • Создайте публичную страницу с подключенными файлами /bitrix/header.php и /bitrix/footer.php. Они инициализируют Bitrix Framework и глобальный объект $APPLICATION.

Изучите общую структуру публичного файла в статье Создание страницы. Если поиск уже работает, но не находит ожидаемый документ, используйте проверки из материала Переиндексация и диагностика поиска.

Показать результаты

Разместите bitrix:search.page в файле публичной страницы, например /search/index.php. Компонент выводит поле запроса и выполняет поиск по текущему сайту.

Передайте в $APPLICATION->IncludeComponent() три аргумента.

  • Имя компонента, например bitrix:search.page.

  • Имя шаблона, например clear. Пустая строка выберет шаблон .default.

  • Массив параметров. Для параметров-флагов используйте Y или N, а для числовых параметров — целые числа.

Основные параметры определяют состав и порядок выдачи.

  • DEFAULT_SORT определяет начальную сортировку. Значение rank сортирует по релевантности, а date ставит выше новые документы.

  • PAGE_RESULT_COUNT ограничивает число результатов на одной странице. Передайте целое число. Компонент использует значение 50, если получает ноль или отрицательное число.

  • CHECK_DATES исключает неактивные на дату запроса документы при значении Y. Значение N отключает проверку дат.

  • USE_LANGUAGE_GUESS исправляет запрос в другой раскладке клавиатуры при значении Y. Значение N оставляет запрос без изменения.

  • RESTART повторяет поиск без морфологии при значении Y, если первый проход не нашел документов. Морфология сопоставляет запрос с разными формами слов. Повторный поиск расширяет выдачу, но может снизить точность совпадений.

  • NO_WORD_LOGIC отключает разбор обычных слов как логических операторов при значении Y.

  • USE_TITLE_RANK учитывает совпадение в заголовке при сортировке, если передать Y.

  • DISPLAY_TOP_PAGER и DISPLAY_BOTTOM_PAGER управляют постраничной навигацией над результатами и под ними. Значение Y выводит нужный блок, а N скрывает его.

  • SHOW_WHERE управляет списком областей поиска. Значение Y выводит список, а N скрывает его. Если параметр не передан, компонент показывает список.

  • SHOW_WHEN управляет полями начала и конца периода. Значение Y выводит поля, а N скрывает их. Если параметр не передан, компонент скрывает поля.

  • PAGER_SHOW_ALWAYS определяет, нужно ли показывать постраничную навигацию, когда все результаты помещаются на одной странице. Значение Y показывает ее всегда, а N — только при наличии нескольких страниц. Если параметр не передан, компонент использует Y.

О режимах кеширования читайте в разделе Настроить кеш и права.

Пример. Компонент показывает по 20 результатов, сортирует их по релевантности и учитывает даты активности документов.

<?php
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/header.php');

$APPLICATION->SetTitle('Поиск');

$APPLICATION->IncludeComponent(
    'bitrix:search.page',
    'clear',
    [
        'DEFAULT_SORT' => 'rank',
        'PAGE_RESULT_COUNT' => 20,
        'CHECK_DATES' => 'Y',
        'USE_LANGUAGE_GUESS' => 'Y',
        'RESTART' => 'Y',
        'NO_WORD_LOGIC' => 'N',
        'USE_TITLE_RANK' => 'Y',
        'SHOW_WHERE' => 'N',
        'SHOW_WHEN' => 'N',
        'DISPLAY_TOP_PAGER' => 'N',
        'DISPLAY_BOTTOM_PAGER' => 'Y',
        'PAGER_SHOW_ALWAYS' => 'N',
        'CACHE_TYPE' => 'A',
        'CACHE_TIME' => 3600,
    ]
);

require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/footer.php');

Компонент начинает поиск, когда получает q или tags в HTTP-запросе. До первого запроса шаблон показывает только форму. Ошибку синтаксиса компонент помещает в ERROR_CODE и ERROR_TEXT, а стандартный шаблон выводит ее рядом с формой.

Добавить форму в общий шаблон

Компонент bitrix:search.form нужен, если поле поиска должно оставаться доступным вне страницы результатов. Разместите его в шапке, боковой панели или другом общем блоке.

Передайте параметр PAGE. Он задает адрес страницы с компонентом bitrix:search.page и поддерживает маркер #SITE_DIR#. Компонент заменяет маркер на корневой каталог текущего сайта.

$APPLICATION->IncludeComponent(
    'bitrix:search.form',
    'flat',
    [
        'PAGE' => '#SITE_DIR#search/index.php',
        'USE_SUGGEST' => 'N',
    ]
);

Форма отправляет GET-запрос с полем q. Значение PAGE должно вести на реальную публичную страницу. Иначе посетитель введет запрос, но не увидит выдачу.

Параметр USE_SUGGEST относится к шаблонам .default и flat. Значение Y заменяет обычное поле на bitrix:search.suggest.input и добавляет подсказки из накопленных данных CSearchSuggest.

Ограничить область поиска

Компонент bitrix:search.page поддерживает постоянное ограничение и выбор посетителя. Эти настройки решают разные задачи.

Задать постоянное ограничение

Параметр arrFILTER ограничивает каждый запрос компонента. Набор вариантов зависит от установленных модулей. Инфоблок хранит однотипный динамический контент, например, новости или товары. Для инфоблоков код фильтра строится как iblock_<тип_инфоблока>.

Подробнее об инфоблоках читайте в статье Введение и базовые концепции.

После выбора источника передайте связанный параметр. Его имя состоит из arrFILTER_ и кода источника. Например, arrFILTER_iblock_content содержит идентификаторы инфоблоков типа content или значение all.

Пример. Страница ищет только в инфоблоках 3 и 7 типа content.

$APPLICATION->IncludeComponent(
    'bitrix:search.page',
    'clear',
    [
        'arrFILTER' => [
            'iblock_content',
        ],
        'arrFILTER_iblock_content' => [
            3,
            7,
        ],
        'SHOW_WHERE' => 'N',
        'PAGE_RESULT_COUNT' => 20,
        'CACHE_TYPE' => 'A',
        'CACHE_TIME' => 3600,
    ]
);

Замените content на код типа инфоблока, а числа — на идентификаторы нужных инфоблоков. Компонент ищет по документам из индекса, поэтому каждый выбранный инфоблок должен участвовать в индексации.

Параметр FILTER_NAME позволяет передать дополнительный массив условий через глобальную переменную. Используйте его, когда область зависит от данных страницы. Имя должно начинаться с латинской буквы или символа подчеркивания. Значение глобальной переменной должно быть массивом условий CSearch.

Сначала сформируйте фильтр из проверенных значений. Не переносите в него произвольные ключи и значения HTTP-запроса. Затем передайте имя глобальной переменной в компонент.

$iblockId = 3;

$GLOBALS['searchSectionFilter'] = [
    'MODULE_ID' => 'iblock',
    'PARAM1' => 'content',
    'PARAM2' => $iblockId,
];

$APPLICATION->IncludeComponent(
    'bitrix:search.page',
    'clear',
    [
        'FILTER_NAME' => 'searchSectionFilter',
        'SHOW_WHERE' => 'N',
        'PAGE_RESULT_COUNT' => 20,
        'CACHE_TYPE' => 'A',
        'CACHE_TIME' => 3600,
    ]
);

Компонент добавляет условия FILTER_NAME к строке запроса и текущему сайту. Параметр arrFILTER дополнительно ограничивает разрешенные источники. Не задавайте один источник двумя способами без необходимости. Иначе компонент применит оба набора условий одновременно.

Подробнее о дополнительных условиях, морфологии и сортировке читайте в статье Поисковые запросы через CSearch.

Дать посетителю выбор

Параметр SHOW_WHERE = Y добавляет в форму список областей. Параметр arrWHERE определяет варианты списка, но ограничивает выдачу только после выбора области посетителем.

Передайте в arrWHERE только те области, которые посетитель может выбрать. Например, значение iblock_content добавляет тип инфоблока content, а forum добавляет форумы, если модуль установлен.

$APPLICATION->IncludeComponent(
    'bitrix:search.page',
    'clear',
    [
        'SHOW_WHERE' => 'Y',
        'arrWHERE' => [
            'iblock_content',
            'forum',
        ],
        'PAGE_RESULT_COUNT' => 20,
        'CACHE_TYPE' => 'A',
        'CACHE_TIME' => 3600,
    ]
);

Посетитель передает выбранную область в HTTP-параметре where. Компонент преобразует значение в ограничения по модулю и типу данных. Если список выбора не нужен, отключите SHOW_WHERE и задайте постоянную область через arrFILTER.

Параметр SHOW_WHEN = Y добавляет поля начала и конца периода. Компонент принимает только даты в формате текущего сайта и ограничивает выдачу по дате изменения документа.

Добавить подсказки

Модуль предоставляет подсказки двух типов. Выберите механизм по ожидаемому действию посетителя.

Предложить поисковые фразы

Компонент bitrix:search.suggest.input подставляет фразы из отдельного набора данных CSearchSuggest. Он не читает статистику CSearchStatistic. Он не ищет документы по мере ввода. Подсказки помогают повторно использовать формулировки, которые уже встречались на сайте.

Основные параметры управляют полем и списком. Для связи с bitrix:search.page обязательно задайте NAME = q. Параметры VALUE, INPUT_SIZE и DROPDOWN_SIZE необязательны. Они меняют вид или наполнение подсказок.

  • NAME задает имя поля формы. Для страницы bitrix:search.page используйте строку q.

  • VALUE заполняет поле переданным текстом. Пустая строка оставляет поле незаполненным.

  • INPUT_SIZE задает размер поля в символах. Передайте целое число. Значение по умолчанию равно 40.

  • DROPDOWN_SIZE ограничивает число подсказок. Передайте целое число. Значение по умолчанию равно 10.

Обычно отдельный вызов не нужен. Шаблоны bitrix:search.form и bitrix:search.page самостоятельно подключают компонент, когда параметр USE_SUGGEST равен Y. На странице результатов механизм также связывает фразу с областью поиска и числом найденных документов.

Подсказки появятся после того, как шаблон страницы результатов передаст фразу и число совпадений в CSearchSuggest::SetResultCount(). Для шаблона clear из основного примера добавьте 'USE_SUGGEST' => 'Y' и в параметры bitrix:search.page, и в параметры bitrix:search.form. Выполните запрос, затем введите начало фразы в форме.

Поле внутри страницы результатов использует хеш фильтра, а отдельная форма без хеша показывает накопленные варианты сайта. Если собственный шаблон не вызывает SetResultCount(), одного включения статистики недостаточно. Подсказки по фразам объясняют хранение и срок жизни этих данных.

Искать документы по заголовкам

Компонент bitrix:search.title отправляет AJAX-запросы и показывает найденные документы по категориям. Посетитель может открыть один результат или перейти на полную страницу выдачи.

Сначала настройте адрес страницы и состав категорий. В массиве параметров компонента задайте PAGE, CATEGORY_<номер> и связанный параметр CATEGORY_<номер>_<источник>. Параметры ниже управляют размером, сортировкой и видом списка.

  • PAGE направляет посетителя на страницу полной выдачи. Передайте строковый адрес страницы с bitrix:search.page.

  • NUM_CATEGORIES задает число категорий в списке. Передайте положительное целое число. Значение по умолчанию равно 1.

  • TOP_COUNT ограничивает число результатов в каждой категории. Передайте положительное целое число. Значение по умолчанию равно 5.

  • ORDER определяет порядок результатов. Значение date сортирует их по дате, а rank — по релевантности.

  • CATEGORY_<номер> выбирает источники категории. Передайте массив их кодов.

  • CATEGORY_<номер>_TITLE задает название категории строкой.

  • CATEGORY_<номер>_<источник> ограничивает выбранный источник. Для iblock_content передайте массив идентификаторов инфоблоков типа content или массив со строкой all для всех таких инфоблоков.

  • SHOW_OTHERS добавляет результаты из источников, которые не вошли в заданные категории, при значении Y. Значение N скрывает такие результаты.

  • SHOW_INPUT управляет полем поиска. Значение Y выводит поле, а N скрывает его.

  • INPUT_ID и CONTAINER_ID связывают поле поиска с контейнером результатов. Передайте уникальные строковые HTML-идентификаторы, если SHOW_INPUT равен Y.

  • CHECK_DATES исключает неактивные документы при значении Y.

  • USE_LANGUAGE_GUESS исправляет запрос в другой раскладке клавиатуры при значении Y.

Пример. Компонент ищет заголовки в инфоблоках типа content и показывает до пяти результатов.

$APPLICATION->IncludeComponent(
    'bitrix:search.title',
    'visual',
    [
        'PAGE' => '#SITE_DIR#search/index.php',
        'NUM_CATEGORIES' => 1,
        'TOP_COUNT' => 5,
        'ORDER' => 'rank',
        'USE_LANGUAGE_GUESS' => 'Y',
        'CHECK_DATES' => 'Y',
        'SHOW_OTHERS' => 'N',
        'CATEGORY_0_TITLE' => 'Материалы',
        'CATEGORY_0' => [
            'iblock_content',
        ],
        'CATEGORY_0_iblock_content' => [
            'all',
        ],
        'SHOW_INPUT' => 'Y',
        'INPUT_ID' => 'title-search-input',
        'CONTAINER_ID' => 'title-search',
    ]
);

JavaScript использует INPUT_ID и CONTAINER_ID для связи поля с контейнером результатов. Шаблон visual из примера начинает запрос после двух введенных символов. Посетитель увидит категорию «Материалы» и до пяти ссылок. Если список остается пустым, проверьте наличие документов из выбранных инфоблоков в поисковом индексе.

Добавить теги

Теги работают только для документов, которые модуль-источник передал в поисковый индекс с полем TAGS. Теги можно передать самостоятельно или вместе с текстовым запросом. Различия этих режимов описаны в правилах поиска по тегам. Чтобы передать теги при индексации, используйте рекомендации из статьи Индексация собственного контента.

Дополнить поле ввода тегов

Компонент bitrix:search.tags.input предлагает теги по введенному фрагменту. Поместите его внутрь GET-формы, которая ведет на страницу bitrix:search.page.

Перед вызовом задайте имя поля и область подсказок. Для передачи тегов в bitrix:search.page обязательно используйте NAME = tags. Укажите SITE_ID, если сайт работает в многосайтовой конфигурации или область нужно зафиксировать явно.

  • NAME задает имя поля. Страница результатов читает теги из поля с именем tags.

  • VALUE заполняет поле выбранными тегами. Передайте строку с тегами через запятую или пустую строку.

  • SITE_ID ограничивает подсказки сайтом с указанным строковым идентификатором. Константа SITE_ID содержит идентификатор текущего сайта.

  • arrFILTER ограничивает подсказки выбранными источниками. Передайте массив кодов так же, как в bitrix:search.page.

  • PAGE_ELEMENTS ограничивает число вариантов в списке. Передайте положительное целое число. Значение шаблона по умолчанию равно 10.

  • SORT_BY_CNT ставит выше частые теги при значении Y.

Пример. Форма отправляет выбранные теги на страницу поиска.

<form action="/search/index.php" method="get">
    <?php
    $APPLICATION->IncludeComponent(
        'bitrix:search.tags.input',
        '',
        [
            'NAME' => 'tags',
            'VALUE' => (string)($_GET['tags'] ?? ''),
            'SITE_ID' => SITE_ID,
            'arrFILTER' => [
                'iblock_content',
            ],
            'arrFILTER_iblock_content' => [
                'all',
            ],
            'PAGE_ELEMENTS' => 10,
            'SORT_BY_CNT' => 'Y',
        ]
    );
    ?>
    <button type="submit">Найти по тегам</button>
</form>

Компонент сохраняет исходное значение в ключе с префиксом ~, а подготовленное значение — в обычном ключе. Стандартный шаблон выводит подготовленный VALUE. После выбора подсказки и отправки формы страница /search/index.php получит тег в GET-параметре tags.

Показать облако тегов

Компонент bitrix:search.tags.cloud группирует теги и строит ссылки на страницу поиска. Размер и цвет в стандартном шаблоне отражают частоту и дату изменения документов.

Основные параметры задают выборку и адрес перехода. Для перехода к выдаче явно задайте URL_SEARCH. Параметры SORT, PAGE_ELEMENTS, PERIOD и CHECK_DATES управляют набором тегов. Параметр CACHE_TIME задает срок хранения кеша.

  • SORT определяет порядок тегов. Значение NAME сортирует их по имени, а CNT — по частоте.

  • PAGE_ELEMENTS ограничивает число тегов. Передайте положительное целое число. Форма настроек компонента предлагает значение 150. При прямом вызове без этого параметра компонент использует резервное значение 1000. Задавайте ограничение явно.

  • PERIOD ограничивает выборку числом дней. Передайте целое число или пустое значение, чтобы снять ограничение.

  • URL_SEARCH задает адрес страницы результатов. Компонент добавляет параметр tags, если строковый адрес не содержит маркер #TAGS#.

  • TAGS_INHERIT сохраняет ранее выбранные теги при переходе по облаку, если передать Y.

  • CHECK_DATES исключает неактивные документы при значении Y.

  • CACHE_TIME задает срок хранения кеша в секундах. Передайте целое число. Значение по умолчанию равно 3600.

Пример. Облако показывает до 50 тегов из документов, которые изменились за последние 30 дней.

$APPLICATION->IncludeComponent(
    'bitrix:search.tags.cloud',
    '',
    [
        'SORT' => 'CNT',
        'PAGE_ELEMENTS' => 50,
        'PERIOD' => 30,
        'URL_SEARCH' => '/search/index.php',
        'TAGS_INHERIT' => 'Y',
        'CHECK_DATES' => 'Y',
        'arrFILTER' => [
            'iblock_content',
        ],
        'arrFILTER_iblock_content' => [
            'all',
        ],
        'CACHE_TYPE' => 'A',
        'CACHE_TIME' => 3600,
    ]
);

Компонент включает группы текущего пользователя в ключ кеша. Если запрос содержит поисковую строку или выбранные теги, компонент отключает кеш для такого вызова. Для остальных вызовов он регистрирует тег управляемого кеша bitrix:search.tags.cloud. Управляемый кеш позволяет связать сохраненный результат с именованным тегом и очищать связанные записи вместе.

Каждая ссылка облака должна открыть URL_SEARCH и передать выбранный тег в параметре tags.

Настроить кеш и права

Компоненты не отменяют модель доступа поискового индекса. Поиск сравнивает права текущего посетителя с кодами доступа документа. Закрытый документ не должен попадать в выдачу пользователя без нужной группы.

Проверьте права после индексации и после каждого изменения доступа к исходному объекту. Модуль-источник отвечает за своевременное обновление поля PERMISSIONS в индексе. Чтобы разобраться в устройстве индекса и распределении ответственности, прочитайте статью Архитектура и поисковый индекс.

Параметр CACHE_TIME у bitrix:search.page кеширует данные для списка областей поиска. Сама выдача зависит от строки запроса, фильтров и текущего пользователя. Не рассчитывайте на этот параметр как на кеш результатов каждого запроса. Изучите общие режимы и устройство кеша в разделе Кеширование компонентов.

Параметр CACHE_TYPE принимает три строковых значения:

  • A использует общую настройку автокеширования сайта,

  • Y включает кеш независимо от режима автокеширования,

  • N отключает кеш.

Параметр CACHE_TIME действует при включенном кеше и задает срок хранения в секундах. Для обычной страницы начинайте с CACHE_TYPE = A. Значения Y и N используйте, когда нужно явно зафиксировать режим для конкретного вызова.

Облако тегов кеширует подготовленный результат и учитывает группы пользователя. Для страницы с часто меняющимся индексом уменьшите CACHE_TIME. Для большой и стабильной выборки увеличьте время.

Проверьте обновление облака вручную.

  1. Отключите кеш значением CACHE_TYPE = N и запомните набор тегов.

  2. Измените теги одного документа, обновите его в индексе и снова откройте страницу.

  3. Включите CACHE_TYPE = A и повторите изменение.

  4. Дождитесь окончания CACHE_TIME или очистите кеш компонента вручную.

  5. Убедитесь, что облако показывает новый тег и актуальное число документов.

Доработать шаблон безопасно

Не изменяйте файлы в /bitrix/components/bitrix/. Обновление продукта может заменить правки. Скопируйте шаблон компонента bitrix:search.page в каталог шаблона сайта и назовите копию results. Путь состоит из пространства имен bitrix, имени компонента search.page и имени нового шаблона. Если выберете другое имя, передайте его вторым аргументом IncludeComponent().

/local/templates/<шаблон_сайта>/components/bitrix/search.page/results/

Передайте имя results вторым аргументом IncludeComponent(). Изучите общую структуру шаблонов и назначение result_modifier.php в статье Компоненты.

Если форматтер результата не передал TITLE_FORMATED, поисковый API готовит заголовок в TITLE_FORMATED и доступный текст документа в BODY_FORMATED. Компонент отдельно готовит URL и TAG_NAME.

  • TITLE_FORMATED — экранированный заголовок с HTML-разметкой подсветки.

  • BODY_FORMATED — экранированный фрагмент текста с HTML-разметкой подсветки.

  • URL — адрес результата, экранированный для HTML.

  • TAG_NAME — экранированное название тега.

Выводите подготовленные поля без повторного вызова htmlspecialcharsbx(). Повторное экранирование покажет разметку подсветки как текст. Форматтер результата может подготовить эти поля самостоятельно; через CSearch::Index() они не сохраняются. Наличие TITLE_FORMATED отключает стандартную подготовку заголовка, тела и тегов. Собственный форматтер должен согласованно подготовить нужные поля, экранировать пользовательский текст и установить тип html для HTML-полей через соответствующие ключи *_TYPE. Если передать только BODY_FORMATED, стандартная подготовка может заменить его значение.

Пример. Шаблон выводит подготовленные заголовок, фрагмент текста и адрес результата.

<?php foreach ($arResult['SEARCH'] as $item): ?>
    <article class="search-result">
        <h2>
            <a href="<?= $item['URL'] ?>">
                <?= $item['TITLE_FORMATED'] ?>
            </a>
        </h2>
        <div><?= $item['BODY_FORMATED'] ?></div>
    </article>
<?php endforeach; ?>

Ключи с префиксом ~ содержат исходные значения. Экранируйте их перед текстовым выводом. Не подставляйте исходный заголовок, текст или тег прямо в HTML.

Адрес результата приходит из индексируемого документа. Модуль-источник должен формировать разрешенный локальный URL или проверенный адрес с протоколом http или https до индексации. HTML-экранирование защищает атрибут от разрыва разметки, но не проверяет допустимый протокол ссылки.

Проверяйте состав выдачи и интерфейс от имени пользователей с разными правами.

  1. Откройте страницу без параметров и убедитесь, что она показывает форму без ошибки.

  2. Найдите известный документ по слову из заголовка и по слову из текста.

  3. Отправьте запрос из формы в общем шаблоне и проверьте адрес страницы и параметр q.

  4. Повторите поиск с сортировкой по релевантности и дате.

  5. Проверьте постоянный фильтр arrFILTER и каждый вариант из arrWHERE.

  6. Введите запрос с ошибочной раскладкой и проверьте исходную и исправленную формулировки.

  7. Проверьте пустую выдачу, запрос из стоп-слов и ошибку в логическом выражении. Стоп-слова — это частые слова, которые поиск исключает из значимой части запроса.

  8. Перейдите между страницами результатов и убедитесь, что запрос и фильтры сохраняются.

  9. Проверьте подсказки по фразам после накопления данных CSearchSuggest и быстрые результаты bitrix:search.title.

  10. Найдите документ по тегу и проверьте ссылки облака тегов.

  11. Повторите поиск от имени пользователя без доступа к одному из документов.

Стандартные компоненты создают интерфейс типового поиска от ввода запроса до безопасного вывода результатов. Модуль-источник по-прежнему отвечает за содержимое индекса, права и адреса документов. PHP API модуля нужен, когда готовая форма, фильтры и шаблоны не покрывают правила проекта.