Вы когда-нибудь вносили изменения в файлы шаблонов только для того, чтобы обнаружить, что все, что вы изменили, исчезло при следующем обновлении? Тогда у нас для вас хорошие новости: начиная с Joomla 4.1 эта проблема решена. Благодаря возможности создавать дочерние шаблоны, добавленные в ядро, вы можете вносить изменения, которые надолго сохранятся. В этой статье объясняется, как это работает.
От переводчика: данная статья была опубликована 1,5 года назад в Joomla Community Magazine и в историческом значении является ретроспективной с поправкой на Joomla 4 (сейчас актуальная ветка - Joomla 5). Тем не менее, архитектурно концепция шаблонизации стабильна и не изменилась. Поэтому информация, рассмотренная в данной статье, является полезной и важной на сегодняшний день при погружении в мир разработки под Joomla.
Филип Уолтон
Член лондонской группы пользователей JUGL и разработчик в компании SoftForge. Фил участвует в нескольких рабочих группах Joomla и участвует в развитии сообщества.
Обращаясь к истории: еще в августе 2020 года у сообщества была надежда, что дочерние шаблоны попадут в релиз Joomla 4.0. Разработка функционала дочерних шаблонов дискуссия велась на Github. Эта ветка интересна, поскольку отражает предыдущий взгляд на вопрос и эволюцию концепции.
Итак, концепция была выработана, но пользовательский интерфейс (UI) отсутствовал, поэтому Димитрис Грамматикогианнис предложил переработанную концепцию, и исправленная версия полностью вошла в версию 4.1 в виде дочерних шаблонов.
Шаблонизатор Joomla
Будет полезно кратко изучить, как работает механизм шаблонов. Мы поговорим об этом очень упрощенно, так что примите это во внимание.
Процесс начинается с запроса на страницу сайта. Как только запросы достигают сервера через URL-адрес через разрешенный DNS, сервер должен проверить, есть ли статические файлы для обслуживания или нет, затем PHP на сервере начинает действовать, инструктируя CMS Joomla выполнить запрос.
У Joomla есть жизненный цикл, и по мере выполнения частей кода он (код) в конечном итоге попадает в роутер. В процессе роутинга Joomla спросит у всех компонентов, есть ли у них все необходимое для выполнения запроса. Если какой-либо компонент выходит вперед и говорит, что может, тогда запрос обрабатывается через уровни контроллера представления модели компонента (MVC).
Сначала контроллер включается и загружает модель, которая будет извлекать данные из баз данных, затем они передаются в представление, которое является областью шаблонов компонента.
Он объединит все структуры данных, предоставленные из модели, в структуру HTML.
Затем контроллер активирует шаблон сайта, и шаблон заменит все теги jdoc:include.
Здесь создаются модули и другие части страницы. По мере чтения тегов jdoc:include они загружают встреченные модули, такие как mod_menu, а затем отдельные модули оценивают то, что им нужно, и добавляют это к информации, которую собирает шаблон.
Как только все будет готово, полученный HTML-код доставляется в браузер, и браузер отображает страницу для вашего просмотра.
Всё просто!
Шаг навстречу дочерним шаблонам
Идея дочерних шаблонов заключается в использовании одного XML-файла, чтобы решить проблему, затрудняющую редактирование текущих шаблонов: любое редактирование шаблона будет потеряно при его обновлении.
Дочерний шаблон — это шаблон, содержащий только один файл — templateDetails.xml. У дочерних элементов должен быть родительский шаблон; они не могут существовать без направляющего родителя.
Чтобы это произошло, в основные файлы шаблонов были внесены некоторые изменения. В шаблоне Кассиопеи вы увидите в его XML-файле некоторые новые включения.
Одним из наиболее заметных является:
<inheritable>1</inheritable>
И это важно, поскольку именно здесь родительский шаблон заявляет, что у него могут быть дочерние элементы.
Довольно просто, не так ли?
Еще одним важным изменением является направление медиа.
<media destination = “templates/site/cassiopeia” folder=”media”>
Это определяет, где должна находиться папка мультимедиа для шаблона.
Почему эта медиа-папка меняется на определение XML шаблона?
В какой-то степени это поможет прояснить исторические несоответствия.
Все остальные пакеты в Joomla хранят свои статические ресурсы в папке мультимедиа.
Шаблоны были единственным исключением из этого правила.
Несколько клубов шаблонов и создателей шаблонов уже заявили, что перенесут свои ресурсы шаблонов из хранилища в шаблоне или в любом другом месте в стандартную папку Joomla, в /media.
Итак, с этого момента стандартом является:/media/templates/[administrator или site]/yourtemplate
В дочернем элементе вы можете указать, где вы храните свои файлы в XML.
Давайте проиллюстрируем это примером.
<media folder="media" destination="templates/site/cassiopeia_phils">
<folder>css</folder>
<folder>js</folder>
<folder>images</folder>
</media>
<inheritable>0</inheritable>
<parent>cassiopeia</parent>
</extension>
Способы использования дочерних шаблонов
Вы можете найти место для создания дочерних шаблонов в области шаблонов: Администратор ->система->шаблоны->шаблоны сайта.
Выберите родительский шаблон, из которого вы хотите создать дочерний шаблон.
Теперь у нас есть возможность начать вносить изменения.
Скажем, например, вы хотите создать переопределение для файла user.css.
Чтобы сделать это, нужно было разветвить все файлы в шаблоне, создать копию нашего основного шаблона и затем сделать его шаблоном по умолчанию. Затем мы заходили и редактировали тот файл, который хотели отредактировать.
Это множество файлов, дублированных только для внесения одного изменения.
Если мы используем дочерний шаблон, дочерний шаблон представляет собой один файл, а затем мы добавляем конкретный файл, который хотим редактировать, это всего лишь 2 файла, в которых намного проще ориентироваться и поддерживать.
Например, мы могли бы создать новый индексный файл основного шаблона Кассиопеи, а затем просто отредактировать его, чтобы изменить порядок вывода, добавить новые области и действительно изменить страницу.
Разница? Вместо того, чтобы дублировать все папки и файлы вашего шаблона, вам нужно дублировать только один файл, который нужно отредактировать.
Так просто!
Если вы хотите добавить новую позицию модуля, опять же, это очень просто: мы просто копируем файл templateDetails.xml и добавляем новую позицию.
<position>Моя новая позиция</position>
Затем мы можем сразу использовать эту позицию с модулями, что позволит быстро и легко расширить позиции модулей шаблона.
Мы можем добавить дополнительные поля в templateDetails.xml, и при сохранении файла дополнительные поля станут доступными.
Одно место для всех ваших ресурсов
Мы уже коснулись изменения в хранилище статических файлов родительского шаблона.
/media
В дочерних шаблонах все ресурсы находятся в папке мультимедиа. Что мы подразумеваем под активами?
Ресурсы спользуются для изменения внешнего вида шаблона:
CSS
Javascript
Images (изображения)
Fonts (шрифты)
Icons (иконки)
Включив свои ресурсы в дочерний шаблон, вы можете легко подставлять различные JavaScript, CSS, изображения, шрифты и иконки в дочернем шаблоне, не перезаписывая родительские файлы!
Можно ли экспортировать дочерние шаблоны?
Да, можно. Функции экспорта пока нет, но все, что нужно, — это zip-архив с файлами вашего шаблона, а затем вы можете импортировать их на другой сайт.
Необходимые файлы и папки.
Файлы:templateDetails.xml
index.php
Папка:media
В папке мультимедиа вы найдете конкретные медиафайлы для этого дочернего шаблона.
Если вы собираетесь импортировать дочерний шаблон на тот же сайт, чтобы быстро создать новый, вам нужно будет изменить имя дочернего шаблона и место назначения мультимедиа в XML-файле.
Как назначить на свой сайт различные дочерние шаблоны?
Это то же самое, что и при использовании нескольких шаблонов: вы просто переходите на вкладку назначения меню в дочернем шаблоне.
В админке заходим в раздел Система -> Сайт -> Стили шаблонов сайта
Выберите стиль шаблона, который является дочерним шаблоном, который вы хотите назначить, а затем выберите третью вкладку «Назначение меню». Там вы можете выбрать, какие пункты меню будут использовать ваш дочерний шаблон.
Переопределения против дочерних шаблонов
Хороший вопрос: когда лучше переопределить, а когда лучше использовать дочерний шаблон?
Во-первых, что такое переопределение?
Переопределение — это файл, который вы можете создать и сохранить в папке HTML вашего шаблона, который позволяет вам предоставить собственный макет для компонента или модуля.
Пока все хорошо, но часто шаблон поставляется с переопределениями основных компонентов Joomla внутри шаблона, так что шаблон может иметь макет, отличный от стандартного шаблона Joomla. Если вы затем захотите изменить внешний вид переопределения шаблона, вам придется редактировать файлы шаблона напрямую, это не очень хорошая идея. При обновлении ваша работа может быть перезаписана.
В этом прелесть дочерних шаблонов: независимо от того, есть ли в вашем шаблоне пользовательские переопределения или вы хотите добавить свой собственный вариант макета компонента, вы можете использовать дочерние шаблоны и быть уверенными, что вы несете ответственность за создание компонента и шаблона. обновлено.
Демонстрация дочерних шаблонов
На встрече группы пользователей Joomla в Лондоне Димитрис Грамматикогианнис выступил с отличным докладом о дочерних шаблонах. Если вы хотите опробовать эту концепцию, было бы разумно посмотреть видео, прежде чем внедрять дочерние шаблоны в свой набор инструментов для кодирования Joomla.
На этом на сегодня всё. Счастливых экспериментов с дочерними шаблонами!
Joomla в Телеграм
Сообщество Yootheme Pro (page builder для Joomla)
Новости клуба NorrNext (разработчики расширений Joomla)
Вакансии и предложения работы по Joomla: фуллтайм, частичная занятость и разовые подработки. Размещение вакансий здесь.
sergeytolkachyov
Молодец! Спасибо за перевод! Только вместо "маршрутизатор" как-то больше на слуху "роутер" (в контексте Joomla) в русскоязычной литературе. Но суть понятна :)
Sulpher Автор
Да, согласен. так привычнее. Поправил.