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

Свой компонент - когда нужен и из чего состоит

Свой компонент нужен реже, чем кажется: половина задач решается шаблоном чужого. Здесь собраны решения для случаев, когда он всё-таки нужен.

Что общего у этих задач

Компонент отвечает за данные, шаблон - за разметку. Смешение этих ролей и даёт знакомые беды: запросы в шаблоне, разметку в коде компонента и невозможность поменять внешний вид без правки логики.

Компонент кэширует сам себя. Внутри него есть готовый механизм, и всё, что дорого получать, кладут в кэш вместе с ключом из параметров, а не считают на каждом показе страницы.

Правка штатного компонента не переживёт обновления. Своё поведение получают своим компонентом или своим шаблоном, а не правкой файлов в каталоге платформы.

Свой компонент живёт в проекте годами. Его читают и правят другие люди, поэтому предсказуемая структура и понятные параметры важнее любой экономии строк при первом написании.

С чего начать

Начинают с проверки, нет ли штатного компонента с нужным поведением. Часто задача решается его параметрами или своим шаблоном, и это дешевле в поддержке.

Если своего компонента не избежать, описывают его параметры до кода. Список параметров - это договор с шаблоном и с тем, кто будет вызывать компонент через год.

Дальше проверяют кэш и права. Компонент должен отдавать одинаковый результат при одинаковых параметрах и не показывать данные, к которым у посетителя нет доступа.

Решения подтемы

Частые вопросы

Когда хватит шаблона чужого компонента?

Когда меняется только внешний вид и набор выводимых полей. Свой компонент нужен, если меняется сама логика получения данных.

Где хранить свои компоненты?

В каталоге своего пространства имён внутри local. Каталог штатных компонентов перезапишется при обновлении.

Обязателен ли файл параметров?

Нужен, если компонент настраивают через интерфейс. Без него параметры задаются только в коде вызова.

Как отладить компонент?

Отключить кэширование на время правок и смотреть результат. Иначе половина изменений не доходит до страницы.

Связанные темы

Первоисточники