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