Перекрытие вывода компонентов и модулей в шаблоне Joomla!

Что главное при разработке сайта на базе готовой CMS системы? Никогда не редактировать файлы ядра! Если внести изменения в ядро, тогда либо следует отказаться от его дальнейшего обновления при выходе новых версий, либо возможны проблемы с измененным функционалом в системных файлах при каждом таком обновлении. Отказавшись от обновлений CMS, сайт рискует быть взломанным злоумышленниками, поскольку обновления не только добавляют новые функциональные возможности, но и исправляют ошибки в существующем коде. Если же обновлять ядро системы, то есть риск переопределения измененных файлов. Это также может вызвать проблемы при дальнейшей поддержке и доработке сайта.
Стандартной задачей при разработке сайта является переопределение вывода какого-либо блока. Но в это же время нельзя изменять системные файлы. Как же при этом изменить вывод? Рассмотрим такую задачу на примере CMS Joomla! и ее системы управления шаблонами.
В CMS Joomla! шаблоны выполняют ряд важных задач, одной из которых является возможность перекрытия макетов компонентов и модулей. Если вы хотя бы раз создавали сайт под управлением Joomla!, то наверняка вам известно, что шаблоны хранятся в директории templates
корневой директории сайта, и что в административной панели есть менеджер шаблонов, позволяющий управлять и настраивать каждый из них. Внутри папки templates
находятся непосредственно папки шаблонов. Например, для Joomla! 3+ версии стандартным шаблоном является templates/protostar
. И уже внутри папки шаблона расположена директория html
, которая и позволяет перекрывать стандартный вывод, как предоставляемых с CMS, так и дополнительно устанавливаемых компонентов и модулей независимых разработчиков.
Где хранятся файлы макетов компонентов и модулей
Файлы макетов отвечают за формирование результирующего html кода страницы или ее части. Они всегда хранятся в папке tmpl
представления. Рассмотрим, например, путь к стандартному макету статьи:
components/com_content/views/article/tmpl/default.php
Здесь components
– стандартная папка всех компонентов Joomla!, com_content
– папка компонента управления материалами, который предоставляется в коробке с CMS системой, views
– папка, содержащая все представления компонента, article
– папка конкретного представления, отвечающего за показ статей, tmpl
– папка с макетами статей. Аналогичная структура и в административной части сайта для этого компонента, за исключением корневой директории administrator
. В модулях Joomla! папка tmpl
зачастую находится непосредственно в корне папки модуля. Например, modules/mod_articles_news/tmpl
.
Как перекрывать макеты в шаблонах Joomla!
Любой макет вы можете переопределить в шаблоне. Для этого нужно расположить файл макета по пути
templates/имя_шаблона/html/имя_компонента/имя_представления/имя_макета.php
для компонентов и
templates/имя_шаблона/html/имя_модуля/имя_макета.php
для модулей соответственно. Например, для приведенного выше примера пути компонента управления статьями этот путь будет:
templates/protostar/html/com_content/article/default.php
Если у вас нет какой либо папки из этого пути, то ее необходимо создать. Сам макет default.php
проще всего скопировать из папки компонента в шаблон. Для примера с модулем этот путь может быть:
templates/protostar/html/mod_articles_news/default.php
В папке tmpl
компонента или модуля могут располагаться несколько макетов. Любой из них или все сразу вы можете перенести в соответствующую папку в шаблоне для дальнейшего изменения. Перед тем, как вывести содержимое указанного макета CMS Joomla! проверит его наличие в директории html
текущего шаблона и, если он там есть, то выведен будет именно этот макет, а не макет из папки компонента или модуля. Отметим также, что для любого из пунктов меню в Joomla! можно указать шаблон для вывода, отличный от используемого по умолчанию. Соответственно и путь к папке с перекрытыми макетами для этого пункта меню будет использовать название выбранного шаблона.
Аналогично можно перекрывать макеты и в административной части сайта. Для этого используется отдельный шаблон из папки administrator/templates
.
Переопределение вывода через менеджер шаблонов
В Joomla! 3+ разработчики дополнили менеджер шаблонов новой функцией, которая позволяет выполнять все необходимые действия для перекрытия макета компонента или модуля прямо из административной панели сайта. Для этого вам нужно зайти в Менеджер шаблонов,



Или на вкладке Стили нажать на название нужного шаблона в колонке Шаблон.

Далее нужно перейти на вкладку Создать переопределение в верхней части страницы.

Здесь достаточно выбрать один из модулей или компонентов, и CMS сама создаст необходимую папку, скопирует туда все стандартные файлы макета и сообщит к ней путь.
Как видите, здесь есть еще столбец с названием Макеты. Сама система управления макетами (layout) тоже недавно появилась в Joomla! и заслуживает отдельной статьи. Здесь лишь упомянем, что принцип их переопределения в шаблоне аналогичен, а путь имеет следующий вид:
templates/имя_шаблона/html/layouts/joomla/имя_макета/
Внутри этой папки находится ряд папок и файлов, относящихся к выводу этого макета.
Таким образом, вы можете изменить внешний вид страниц сайта, не меняя внутреннюю структуру системы управления контентом.
Это стандартный механизм перекрытия макетов в шаблоне, но здесь тоже могут быть исключения. Например, при использовании шаблонов от компании YOOtheme на базе их собственной Warp Framework. Конечно, эта система тоже опирается на структуру и функциональные особенности шаблонов Joomla!, но также имеет свои собственные внутренние стили оформления в каждом из которых можно переопределить вывод макетов. Подробнее об этом механизме мы расскажем в одной из будущих статей.