Шаблоны и собственное оформление
Шаблоны .default показывают выбранные поля и помогают проверить подключение. Для карточек новостей, команды или услуг создайте шаблон проекта. Скриншоты новостей в руководстве показывают такой пример оформления.
Храните свои шаблоны в /local/templates/<шаблон сайта>/components/kokhanenko/hlblock.list/<имя>/ и аналогичном каталоге hlblock.detail. Не изменяйте поставляемые шаблоны внутри модуля: при установке ресурсы копируются заново.
Контракт результата
| Компонент | Записи | Общие данные |
|---|---|---|
hlblock.list | $arResult['items'] — список строк, именно строчное имя | HLBLOCK_ID, DEPENDENCY_HLBLOCK_IDS, HTML_FIELDS |
hlblock.detail | $arResult['ITEM'] — строка или null | NOT_FOUND, HLBLOCK_ID, HTML_FIELDS |
Выбранные поля сохраняют исходные значения. Раскрытые файлы и связи находятся в <FIELD>_DATA. Не заменяйте обращения к UF_FILE на ожидание файлового массива: для этого есть UF_FILE_DATA.
PUBLIC_EDIT содержит нейтральные идентификаторы интеграции, а не права пользователя. При включённом SEO/OpenGraph у детали может присутствовать METADATA; компонент применяет его сам.
Минимальный шаблон списка с редактором
<?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() такая же. Запросы к БД из цикла шаблона не нужны: подготовьте файлы и связи параметрами компонента.
Вывести изображение
$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. Это помощники шаблона, а не редактор структуры сайта.
Подробнее: области, кеширование.