Перейти к основному содержимому

ParamTrait

Трейт: Xpage\Core\Trait\Component\ParamTrait

Назначение: Предназначен для стандартизации и автоматизации подготовки входных параметров компонента ($arParams), реализует декларативный подход: вместо ручной проверки каждого ключа, параметры проходят через цепочку специализированных методов-обработчиков.

Зависимости:

  • Ядро: Bitrix\Main.
  • Ожидает наличие метода getIblockIdByApiCode() в классе компонента (обычно наследуется от Xpage\Core\Component).

prepareComponentParams(array $arParams, array $prepareStages = [])

Главный входной узел (конвейер).

  • Логика: Проходит по списку стадий (из $defaultPrepareMap или переданных вручную) и вызывает соответствующие методы prepare...Params.
  • Гибкость: Позволяет определить строгий порядок обработки или пропустить ненужные шаги.

Основные стадии обработки

  • prepareIblockParams: Очищает IBLOCK_API_CODE и автоматически конвертирует его в числовой IBLOCK_ID. Если метод конвертации не найден, выбрасывает критическую ошибку.
  • prepareSortParams: Устанавливает значения по умолчанию для трех уровней сортировки. Приводит направления (ASC/DESC) к верхнему регистру.
  • prepareCacheParams: Гарантирует наличие времени кэширования. По умолчанию — 1 год (31 536 000 сек).
  • prepareSectionSelectParams / prepareElementSelectParams:
    • Формирует массивы выбираемых полей.
    • Важно: Автоматически добавляет в выборку (fields) те поля, которые используются в параметрах роутинга (ROUTE_PARAMETER_...), чтобы адрес детальной страницы мог быть сформирован без дополнительных запросов.
  • prepareSeoParams: Приводит SEO-настройки (Title, Keywords, Description, 404) к строгому формату Y/N.
  • prepareCommonParams: Обрабатывает флаги подключения шаблона и конвертации ключей результата в camelCase.

Примеры использования

Стандартное подключение в компоненте

class MyComponent extends \Xpage\Core\Component 
{
use \Xpage\Core\Trait\Component\ParamTrait;

public function onPrepareComponentParams($arParams)
{
// Запускаем полную цепочку обработчиков
return $this->prepareComponentParams($arParams);
}
}

Выборочный запуск стадий

Если компоненту нужны только базовые настройки и кэш, но не нужны SEO и инфоблоки:

public function onPrepareComponentParams($arParams)
{
return $this->prepareComponentParams($arParams, ['cache', 'common']);
}

Технические особенности

  • Декларативность: Список стадий описан в массиве $defaultPrepareMap. Это позволяет легко расширять логику в конкретных компонентах, просто переопределяя карту или добавляя новые методы.
  • Безопасность: Методы используют array_filter и приведение типов, что защищает от передачи пустых строк или некорректных массивов из настроек .parameters.php.
  • Автоматизация роутинга: Трейт «понимает», что если в роуте используется поле CODE, то его обязательно нужно включить в SELECT запрос к базе, даже если контент-менеджер забыл выбрать его в настройках компонента.