Онлайн-руководство разработчика 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

Шаблоны вывода данных

Откройте форму редактирования шаблона. 

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

Вывод содержимого

Пусть нужно вывести объекты в таком шаблоне:

<div class="goods_list">
  <div class="header">Все товары в наличии на нашем складе.</div>
  <div class="content">
    <div class=”item”>
      <h3><a href="#">Первый товар</a></h3>
      <p>Описание первого товара</p>
      <p>Производитель: Россия</p>
    </div>
    <div class=”item”>
      <h3><a href="#">Второй товар</a></h3>
      <p>Описание второго товара.</p>
      <p>Производитель: Россия</p>
    </div>
  </div>
</div>

Шаг 1: разбиваем код на отдельные шаблоны

В префикс списка помещаем код:

<div class="goods_list">
  <div class="header">Все товары в наличии на нашем складе.</div>
  <div class="content">

В поле объекта:

    <div class=”item”>
      <h3><a href="#">Первый товар</a></h3>
      <p>Описание первого товара</p>
      <p>Производитель: Россия</p>
    </div>

В суффикс:

  </div>
</div>

Шаг 2: заменяем статичные значения на переменные, добавляем служебные переменные

В префиксе добавляем переменную $f_AdminCommon, которая в режиме редактирования выводит панель управления блоком, а в режиме просмотра пуста:

<?= $f_AdminCommon; ?>
<div class="goods_list">

  <div class="header">Все товары в наличии на нашем складе.</div>
  <div class="content">

В шаблоне объекта в списке заменяем конкретные значения на переменные:

   <?= $f_AdminButtons; ?>
   <div class=”item”>
      <h3><a href="<?= $fullLink; ?>"><?= $f_Name; ?></a></h3>
      <p><?= $f_Description; ?></p>
      <p>Производитель: <?= $f_Producer; ?></p>
    </div>

Здесь мы подразумеваем, что в компоненте мы добавили поля Name, Description и Producer. Для обращения к ним используются переменные вида $f_ИМЯПОЛЯ. Переменная $f_AdminButtons в режиме редактирования выводит панель управления объектом, а в режиме просмотра пуста. А переменная $fullLink содержит ссылку на страницу с полным выводом объекта. Также есть переменная $fullDateLink, она тоже выводит ссылку на страницу полного вывода, но добавляет в url дату добавления записи в формате /2024/03/24/.

А в поле суффикса добавим вывод пагинации (кликабельные ссылки на следующую/предыдущую страницу списка, если в инфоблоке содержится больше объектов, чем разрешено выводить на одной странице):

  </div>
<?= browse_messages( $cc_env, $range, $user_template = false ); ?>
</div>

Читайте подробнее о пагинации.

Шаг 3: проверяем переменные на непустоту, а список на наличие элементов

В нашем примере в префиксе выводится надпись, подразумевающая наличие товаров ниже. Но если товаров в списке нет, логично вывести другую надпись. Для проверки наличия объектов в инфоблоке можно использовать переменные $rowCount (реальное количество выведенных на страницу объектов) или $totRows (общее количество объектов данного инфоблока).

Префикс списка:

<?= $f_AdminCommon; ?>
<div class="goods_list">
 <div class="header">

<?= $totRows>0 ? “Все товары в наличии на нашем складе.” : “Товаров в этой категории в наличии временно нет.”; ?>
  </div>
  <div class="content">

Если поле производителя не обязательно, то в объекте не стоит выводить всю строку о нем:

   <?= $f_AdminButtons; ?>
 <div class=”item”>
      <h3><a href="<?= $fullLink; ?>"><?= $f_Name; ?></a></h3>
      <p><?= $f_Description; ?></p>
      <?= $f_Producer ? “<p>Производитель: <?= $f_Producer; ?></p>” : NULL; ?>
    </div>

Работа с шаблоном компонента в редакторе

Наверху страницы компонента отображается адрес папки (каталога), где хранятся файлы компонента, в т.ч. шаблон списка - файл Class.html. Вы можете редактировать его в любом редакторе, только не вносите изменения в структуру файла - комментарии, разделяющие части шаблона:

<!-- FormPrefix -->Содержимое префикса<!-- /FormPrefix -->

<!-- RecordTemplate -->Содержимое шаблона объекта<!-- /RecordTemplate -->

<!-- FormSuffix -->Содержимое суффикса<!-- /FormSuffix -->

В нашем примере содержимое этого шаблона будет выглядеть так:

<!-- FormPrefix -->
<?= $f_AdminCommon; ?>
<div class="goods_list">
 <div class="header">
<?= $totRows>0 ? “Все товары в наличии на нашем складе.” : “Товаров в этой категории в наличии временно нет.”; ?>
  </div>
  <div class="content">
<!-- /FormPrefix -->

<!-- RecordTemplate -->   
<?= $f_AdminButtons; ?>
 <div class=”item”>
      <h3><a href="<?= $fullLink; ?>"><?= $f_Name; ?></a></h3>
      <p><?= $f_Description; ?></p>
      <?= $f_Producer ? “<p>Производитель: <?= $f_Producer; ?></p>” : NULL; ?>
    </div>
<!-- /RecordTemplate -->

<!-- FormSuffix -->  
</div>
<?= browse_messages( $cc_env, $range, $user_template = false ); ?>
</div>
<!-- /FormSuffix -->

Другие настройки списка объектов

Количество объектов на странице

Устанавливает максимальное количество объектов в блоке, для вывода остальных можно будет использовать пагинацию или кнопку отображения следующей порции или другие решения.

Минимальное и максимальное количество объектов в инфоблоке

Если количество объектов в блоке равно минимальному, система не позволит удалять из блока объекты, а если максимальному - добавлять.

Признак сортировки объектов в блоке

Фрагмент SQL-запроса выборки объектов для отображения в блоке. По умолчанию содержит “a.`Priority` ASC, a.`Message_ID` ASC”: первичный признак сортировки поле приоритета, вторичный - номер объекта, т.е. при неиспользовании приоритета сначала будут выводиться более старые записи. Сюда можно вносить любые поля компонента, например, “a.Price” (сортировка по возрастанию цены) или “a.Date desc” - сортировка по убыванию поля даты - главное, чтобы эти поля были в таблице компонента. Это значение можно переопределить как на уровне настройки инфоблока, так и программно.

Шаблон отображения одного объекта на отдельной странице

Результат выполнения этого шаблона посетитель увидит, нажав на ссылку на отдельную страницу (новость, товар, проект) в списке объектов. В этой секции два поля.

Шаблон заголовка страницы

Результат выполнения этого шаблона вернет метод $nc_core->page->get_h1() (если макет вашего сайта сверстан традиционным образом), а также его выведет блок “Заголовок страницы” (если ваш сайт собран на конструкторе). Если ниже поля установлена галочка “Использовать в теге title”, то его результат выполнения шаблона будет отображен и в теге title (метод $nc_core->page->get_title()). Если поле пустое, выводиться будет название раздела.

Примеры заполнения поля:

  • $f_Name // вывод содержимого поля Name
  • $f_Name ($f_Manufacturer), $f_Price руб. // вывод названия, производителя, цены

Шаблон отображения объекта

По функциональности шаблон аналогичен шаблону вывода объекта в списке с поправкой на то, что объект будет выведен один. В нашем примере текст шаблона может быть таким:

<?= $f_AdminButtons ?>
<div class="object-item-full">
      <p><?= $f_Description; ?></p>
      <?= $f_Producer ? “<p>Производитель: <?= $f_Producer; ?></p>” : NULL; ?>
      <?= $f_Image->as_img(array("alt" => $f_Name)); ?>
      <p><?= $f_Text; ?></p>
        <div class="price">Цена: <?= $f_Price; ?> руб.
</div>

Файл шаблона в каталоге компонента: RecordTemplateFull.html.

Свойства объекта и другие переменные

В шаблонах можно использовать все поля компонента (с префиксом $f_), а также некоторые служебные поля и переменные. Обратите внимание, что для получения значения поля простого типа (“Строка”, “Целое число”, “Число с плавающей запятой”, “Текст”) достаточно обратиться к переменной вида $f_ИМЯПОЛЯ, тогда как для типов “Файл”, “Дата и время”, “Связь с другими объектами”, “Множественный выбор”, “Множественная загрузка файлов” результат может храниться в наборе переменных, массиве, а также возвращаться методом. Подробнее об этом в разделе Поля компонента.

Список основных свойств и переменных, использующихся в шаблонах компонентов:

  • $f_Checked — включен или выключен объект
  • $f_IP — IP пользователя добавившего объект
  • $f_LastIP — IP пользователя, который последним редактировал объект
  • $f_LastUpdated — время последнего обновления объекта
  • $f_LastUserAgent — User Agent пользователя, который последним редактировал объект
  • $f_LastUserID — ID пользователя, который последним редактировал объект
  • $f_RowID — номер (ID) объекта в таблице БД (MessageXX)
  • $f_RowNum — порядковый номер объекта на странице
  • $f_UserID — номер пользователя, создавшего объект
  • $f_UserAgent — User Agent пользователя, добавившего объект
  • $f_ИмяПоля — содержит значение поля компонента
  • $fullDateLink —ссылка на страницу полного вывода объекта с датой добавления
  • $fullLink — ссылка на страницу полного вывода объекта
  • $editLink, $deleteLink, $dropLink, $checkedLink — ссылки для работы с данными: редактирование, удаление, отключение/включени
  • $MODULE_VARS[КлючевоеСловоМодуля][ИмяПеременной] — содержит значения переменных настроек модулей
  • $nextLink —  содержит ссылку на следующую страницу списка объектов
  • $parent_sub_tree[ ] — массив свойств текущего раздела и его родителей всех уровней
  • $prevLink — содержит ссылку на предыдущую страницу списка объектов
  • $recNum — количество объектов для вывода
  • $sub — номер (ID) текущего раздела (в таблице Subdivision)
  • $sub_level_count — содержит текущий уровень вложенности навигации
  • $subHost — содержит текущий хост (домен) вида «www.company.ru»
  • $subLink — содержит URI текущего раздела вида «/about/news/»
  • $totRows — cодержит общее количество объектов данного инфоблока;
  • $nc_component_css_class — CSS-классы, присваиваемые блокам с текущим шаблоном;
  • $nc_component_css_selector — CSS-классы, присваиваемые блокам с текущим шаблоном в виде CSS-селектора;
  • $nc_block_id — идентификатор текущего блока;
  • $nc_data — идентификатор текущего блока.

Другие поля формы

  • Стили для сайта (файл SiteStyles.css в каталоге компонента) - добавьте сюда CSS, применяемый к шаблонам компонента; стили будут автоматически подключены на страницах, где используется этот компонент (https://netcat.ru/developers/docs/components/stylesheets/)
  • Системные настройки (файл Settings.html) - php-код, который выполняется перед выводом списка объектов или одного объекта.
Описание проекта