class.php: жизненный цикл и структура
Жизненный цикл class.php начинается с метода onPrepareComponentParams(), где валидируются и приводятся типы параметров до их системного экранирования ядром. Метод executeComponent() управляет кешированием и наполнением массива $arResult, а логика, требующая исполнения на каждом хите (заголовки, хлебные крошки, ассеты), выносится в файл component_epilog.php.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
class.php — ООП-логика
-
2
component.php — процедурная логика
-
3
.description.php — описание
-
4
.parameters.php — параметры
Материалы
Официальная документация
-
Создание компонента: раздел «Файл class.php» Новая дока
Проверь себя
В onPrepareComponentParams() параметр TITLE приходит с «&», а в шаблоне уже с «&». Кто его изменил и где взять исходный?
Ядро: __prepareComponentParams() вызывается после onPrepareComponentParams() и экранирует строки, в которых есть символы из набора ; & < > и кавычка. Исходное значение лежит в $arParams с префиксом ~, то есть в ~TITLE.
Заказчик жалуется, что вложенный массив в параметрах вывелся в шаблоне с тегами. Почему экранирование не сработало?
__prepareComponentParams() обрабатывает строки и только первый уровень массивов. Вложенные массивы глубже одного уровня остаются как есть, их нужно приводить самим в onPrepareComponentParams().
Чем component.php отличается от class.php по возможностям, кроме стиля?
component.php — включаемый файл, у него нет onPrepareComponentParams(), подписанных параметров и AJAX-действий через Controllerable. Он получает уже экранированные $arParams и не может переопределить шаги жизненного цикла. Новый код только в class.php.
Почему $arParams = $this->arParams; в методе класса ломает передачу изменений в шаблон?
Ядро передаёт в шаблон и component.php ссылки на члены класса arParams и arResult. Присваивание копии или unset разрывает связь, и правки уходят в локальную переменную, а не в шаблон.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить