Свой компонент - когда нужен и из чего состоит
Свой компонент нужен реже, чем кажется: половина задач решается шаблоном чужого. Здесь собраны решения для случаев, когда он всё-таки нужен.
Что общего у этих задач
Компонент отвечает за данные, шаблон - за разметку. Смешение этих ролей и даёт знакомые беды: запросы в шаблоне, разметку в коде компонента и невозможность поменять внешний вид без правки логики.
Компонент кэширует сам себя. Внутри него есть готовый механизм, и всё, что дорого получать, кладут в кэш вместе с ключом из параметров, а не считают на каждом показе страницы.
Правка штатного компонента не переживёт обновления. Своё поведение получают своим компонентом или своим шаблоном, а не правкой файлов в каталоге платформы.
Свой компонент живёт в проекте годами. Его читают и правят другие люди, поэтому предсказуемая структура и понятные параметры важнее любой экономии строк при первом написании.
С чего начать
Начинают с проверки, нет ли штатного компонента с нужным поведением. Часто задача решается его параметрами или своим шаблоном, и это дешевле в поддержке.
Если своего компонента не избежать, описывают его параметры до кода. Список параметров - это договор с шаблоном и с тем, кто будет вызывать компонент через год.
Дальше проверяют кэш и права. Компонент должен отдавать одинаковый результат при одинаковых параметрах и не показывать данные, к которым у посетителя нет доступа.
Решения подтемы
- Свой компонент: структура, параметры, кэш результата - файлы компонента, параметры, кэширование и шаблон.
- Наследование чужого компонента: расширить, не копируя - подключение класса и переопределение метода.
- AJAX-действия своего компонента: действия, параметры, ошибки - объявление действий, подписанные параметры, фильтры, ошибки.
- Свой компонент не подключается: разбор причин - каталог и имя, ошибка в классе, шаблон, кэш, параметры.
- Компонент изнутри: вызов, кэш, шаблон, эпилог - порядок вызова, поиск шаблона, кэш результата, эпилог.
Частые вопросы
Когда хватит шаблона чужого компонента?
Когда меняется только внешний вид и набор выводимых полей. Свой компонент нужен, если меняется сама логика получения данных.
Где хранить свои компоненты?
В каталоге своего пространства имён внутри local. Каталог штатных компонентов перезапишется при обновлении.
Обязателен ли файл параметров?
Нужен, если компонент настраивают через интерфейс. Без него параметры задаются только в коде вызова.
Как отладить компонент?
Отключить кэширование на время правок и смотреть результат. Иначе половина изменений не доходит до страницы.
Связанные темы
- Компоненты 2.0 - устройство компонентов целиком
- Шаблон сайта на практике: стили, скрипты, области - обвязка вокруг компонентов
- Кэширование своей выборки: ключ, теги, сброс - тот же механизм вне компонентов
- Свой модуль: структура, установка, автозагрузка - где живёт логика решения
- Раздел Компоненты и шаблоны