Шаблоны и собственное оформление

Шаблоны .default показывают выбранные поля и помогают проверить подключение. Для карточек новостей, команды или услуг создайте шаблон проекта. Скриншоты новостей в руководстве показывают такой пример оформления.

Храните свои шаблоны в /local/templates/<шаблон сайта>/components/kokhanenko/hlblock.list/<имя>/ и аналогичном каталоге hlblock.detail. Не изменяйте поставляемые шаблоны внутри модуля: при установке ресурсы копируются заново.

Контракт результата

КомпонентЗаписиОбщие данные
hlblock.list$arResult['items'] — список строк, именно строчное имяHLBLOCK_ID, DEPENDENCY_HLBLOCK_IDS, HTML_FIELDS
hlblock.detail$arResult['ITEM'] — строка или nullNOT_FOUND, HLBLOCK_ID, HTML_FIELDS

Выбранные поля сохраняют исходные значения. Раскрытые файлы и связи находятся в <FIELD>_DATA. Не заменяйте обращения к UF_FILE на ожидание файлового массива: для этого есть UF_FILE_DATA.

PUBLIC_EDIT содержит нейтральные идентификаторы интеграции, а не права пользователя. При включённом SEO/OpenGraph у детали может присутствовать METADATA; компонент применяет его сам.

Минимальный шаблон списка с редактором

PHP
<?php
declare(strict_types=1);

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
    die();
}

use Kokhanenko\Hlblocks\Template\HlElementEditWrapper;

$this->setFrameMode(true);
$editing = !empty($arResult['PUBLIC_EDIT']['REQUESTED']);

foreach ($arResult['items'] as $item) {
    if ($editing) {
        HlElementEditWrapper::begin((int)$arResult['HLBLOCK_ID'], (int)$item['ID']);
    }
    echo '<article><h2>' . htmlspecialcharsbx((string)$item['UF_NAME']) . '</h2></article>';
    if ($editing) {
        HlElementEditWrapper::end();
    }
}

В SELECT должны входить ID и UF_NAME. Обёртка добавляет цель для наведения, а права получает отдельный запрос. Не кешируйте в шаблоне sessid, разрешения, содержимое формы или данные текущего пользователя.

Для детали используйте $arResult['ITEM'] и сначала проверьте, что запись найдена. Схема begin()/end() такая же. Запросы к БД из цикла шаблона не нужны: подготовьте файлы и связи параметрами компонента.

Вывести изображение

PHP
$file = $item['UF_PREVIEW_PICTURE_DATA'] ?? null;
if (is_array($file) && !empty($file['SRC'])) {
    echo '<img src="' . htmlspecialcharsbx((string)$file['SRC'])
        . '" alt="' . htmlspecialcharsbx((string)$item['UF_NAME']) . '">';
}

Пример относится к одиночному файловому полю. Для множественного переберите список _DATA. Обычные строки и атрибуты экранируйте. Если выводите HTML собственного типа kokhanenko_html, используйте Kokhanenko\Hlblocks\UserTypes\HtmlContent::sanitize(); не определяйте безопасность по имени поля UF_HTML.

Ссылки и маршруты

Компоненты самостоятельные, они не являются комплексным компонентом с автоматическим ЧПУ. Шаблон списка формирует ссылку, а правило маршрутизации сайта передаёт ID или код детальному компоненту. DETAIL_URL в демонстрационном шаблоне news обрабатывает сам шаблон; это не универсальный маршрутизатор ядра компонента.

Проверяйте код из URL до использования. Не подключайте файл по пути, полученному от посетителя. Для неизвестной записи настройте 404 и проверьте HTTP-статус.

Компонент content.block

kokhanenko:content.block подключает шаблон блока и передаёт ему параметры. Стандартный шаблон выводит title как экранированный заголовок и content как доверенный HTML. Он не выбирает записи HL и не создаёт перевод автоматически.

В собственном шаблоне можно объединять параметры оформления с ContentItemWrapper::showBlock(). Для схем параметров доступны CommonParameters::getBasic() и getImage(), для вывода — CommonParametersRender. Это помощники шаблона, а не редактор структуры сайта.

Подробнее: области, кеширование.