Онлайн-руководство разработчика NetCat
Netcat 7 — нейросеть в вашем сайте!
Подробнее
Модуль «Поиск по сайту» 13.2.1Начало работы с модулем 13.2.2Язык запросов 13.2.3Способы хранения индекса 13.2.4Интерфейс модуля в панели управления сайтом 13.2.5Области индексирования 13.2.6Области HTML-страниц 13.2.7Области поиска на сайте 13.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 13.2.9Правила индексирования 13.2.10Постановка задачи переиндексирования в очередь 13.2.11Интеграция модуля в макеты дизайна сайта 13.2.12Простая форма поиска 13.2.13Расширенная форма поиска 13.2.14Вывод результатов поиска 13.2.15Стилизация списка подсказок 13.2.16Расширенные настройки 13.2.17Разработка расширений модуля 13.2.18Обзор архитектуры модуля 13.2.19Обработчики документов различных типов 13.2.20Текстовые фильтры 13.2.21Анализаторы текста 13.2.22Корректировщики запросов 13.2.23Подключение других поисковых систем 13.2.24Решение проблем с поиском 13.2.25Решение проблем с индексированием 13.2.26Справочник API

Системные настройки

Поле «Системные настройки» представляет собой PHP-консоль и работает при отображении списка объектов, полном отображении и выводе форм. При помощи системных настроек можно, в частности, модифицировать SQL-запрос, возвращающий выборку объектов, в том числе и при полном отображении.

Изначально основной SQL-запрос, возвращающий список объектов на страницу, выглядит приблизительно следующим образом:

SELECT список_полей FROM `user` WHERE условия_выборки

Условиями выборки могут являться:

  • выбрать объекты только в текущем разделе
  • выбрать объекты только в текущем компоненте раздела
  • выбрать объекты только текущего пользователя
  • выбрать только включённые объекты
  • выбрать только родительские объекты

На данные условия могут влиять следующие значения:

Флаг Описание
$ignore_catalogue если 1, игнорирует выборку объектов по текущему сайту (по умолчанию 0)
$ignore_sub  если 1, игнорирует выборку объектов по текущему разделу (по умолчанию 0)
$ignore_cc если 1, игнорирует выборку объектов по текущему компоненту раздела (по умолчанию 0)
$ignore_user если 1, игнорирует выборку объектов по текущему пользователю (по умолчанию 1)
$ignore_check если 1, игнорирует выборку только включенных объектов (по умолчанию 0)
$ignore_parent если 1, игнорирует выборку только родительских объектов (по умолчанию 0)
$ignore_all позволяет создать свой запрос, вместо системного. При установке значения 1 - основной запрос не будет составлен системой и его можно будет скомпоновать вручную, посредствам использования переменных $query_select, $query_from и подобных (по умолчанию 0)
$ignore_limit позволяет игнорировать ограничение на выбор объектов. При установке значения 1 - будут выбраны все объекты (по умолчанию 0). Если в компоненте и инфоблоке не задано ограничение "Показывать по ХХ объектов на сранице", то $ignore_limit устанавливается в 1
$query_limit позволяет задать ограничение на выборку объектов. Например "20, 10", в запросе отобразится "... LIMIT 20, 10". Данный флаг активен если включен $ignore_limit или не задано ограничение "Показывать по ХХ объектов на сранице" в настройках компонента и инфоблока, а также при $ignore_all
$distinct если 1, добавляет к запросу DISTINCT, т.е. получается SELECT DISTINCT fields FROM
$distinctrow если 1, добавляет к запросу DISTINCTROW, т.е. получается SELECT DISTINCTROW fields FROM
$ignore_link если 1, изменяет ссылки на полное отображение объекта ($fullLink).

В нормальном режиме ссылки на объекты ведут в тот инфоблок и раздел, в котором они были добавлены, что удобно при выводе списка объектов из разных разделов: каждый объект открывается в своем разделе. При включении $ignore_link все ссылки ведут в инфоблок и раздел, в котором прикреплен компонент (инфоблок) с $ignore_cc, то есть ссылки относительные, и все ведут в один раздел.

Важно: если у объектов есть ключевые слова (и, соответственно, путь к страницам объектов содержит ключевое слово), при использовании $ignore_link не гарантируется, что по указанному адресу всегда будет конкретный объект, так как ключевые слова объектов уникальны только в пределах инфоблока. В случае наличия объектов с одинаковыми ключевыми словами выбор объекта для страницы полного вывода осуществляется в следующем порядке:
  1. из текущего инфоблока;
  2. из текущего раздела;
  3. с текущего сайта (при $ignore_sub = 1);
  4. из любых сайтов (при $ignore_catalogue = 1).

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

Несколько примеров использования переопределений запроса.

  • На сайте есть раздел с категориями товаров. Каждый товар выводится в определённой категории. Нужно в разделе «Все товары» вывести товары из всех категорий. Для этого в системных настройках достаточно прописать условие: $ignore_sub = $ignore_cc = 1.
  • Вывести все разделы независимо от того выключены они или нет: $ignore_check = 1;
  • В случае когда вам нужно вывести объекты с «подобъектами» (пример – иерархический форум), необходимо установить значение переменной $ignore_parent в единицу. В противном случае, отображаются только родительские объекты.

Кроме этого у разработчика есть возможность влияния на SQL-запрос.

SELECT $distinct a.список_полей, $query_select
FROM `MessageXX` AS a, $query_from
$query_join
WHERE условия_выборки AND $query_where
GROUP BY $query_group
HAVING $query_having
ORDER BY $query_order
LIMIT $query_limit

Для влияния на запрос необходимо вставить в системные настройки соответствующую переменную (выделены цветом) и прописать своё условие.

Кроме того, в поле «Системные настройки» доступны:

  • ассоциативные массивы $current_catalogue, $current_sub, $current_cc, $current_user. Эти массивы содержат атрибуты сущностей «Сайт», «Текущий раздел», «Текущий инфоблок», «Авторизованный пользователь». Например, $current_sub[“Subdivision_Name”] содержит название текущего раздела. Чтобы увидеть все названия атрибутов (поля соответствующих таблиц), исполните в SQL-консоли запрос explain Subdivision (или Catalogue, Sub_Class, User);
  • все переменные, подаваемые на загружаемую страницу методом GET либо в функции nc_objects_list(). Мы уже писали о том, что в аттрибут $params функции nc_objects_list() можно передать дополнительные параметры. Выглядеть они могут следующим образом: 
    <?=nc_objects_list(10, 20, “&param1=$_GET['param1']&us_id=$f_UserID”); ?>.

Полезная информация: Для отладки запроса на этапе разработки можно вывести переменную $message_select в префиксе компонента, в этом случае, после обновления целевой страницы, на экране будет отображён полный MySQL-запрос вывода данных.

Неконтентные компоненты

В случаях, когда для работы компонента не требуются запросы к базе данных (таблицы MessageXX с данными компонента), следует определить массив $nc_data. Если задать пустой массив — $nc_data = []; — запрос к БД не будет выполняться, список объектов будет пуст. Это полезно для неконтентных блоков, чтобы не делать лишний запрос к БД. Если задать массив с данными (с индексом от 0), то эти данные будут доступны в списке объектов (запрос к БД также не будет выполняться). Значения каждого элемента будут доступны в переменной $f_ключ_в_массиве.

Описание проекта