Переопределение макета НЕ в шаблоне Joomla
Мы все знаем, что при работе с сайтом создание своих переопределений стандартных макетов — это типовая, стандартная работа. Она позволяет сделать из материалов, контактов почти всё, что угодно.
И так же мы знаем, что по классике эти переопределения кладутся в папку html активного шаблона Joomla (не важно, для админки или для пользовательской части).
Макет blog.php и blog.xml к нему из JPATH_SITE/components/com_content/tmpl/category/ мы помещаем в templates/<ВАШ_ШАБЛОН>/html/com_content/category и творим там всё, что захотим:
- любая вёрстка в
blog.phpи субмакетах - любое название для типа пункта меню (гаражи, дачи, самолёты — каталог чего вы делаете на материалах) — в
blog.xml(илиsamolet.php+samolet.xml) - любые дополнительные параметры для пункта меню на этот тип — добавьте нужные кнопки и инпуты в
blog.xml
Да, это всё классика. Удобно то, что мы создаём нужный нам тип пункта меню таким образом и можем выбрать его в админке: список самолётов, список гаражей.
Если наше переопределение лежит в шаблоне, то URL при создании пункта меню будет вида index.php?option=com_content&view=category&layout=yourtemplate:samolet.
Именно так, через двоеточие: layout=yourtemplate:samolet. Joomla будет знать, что нужно залезть в нужный шаблон и взять нужное переопределение. Если мы НЕ создаём свой тип пункта меню таким образом, а просто переопределяем — то всё ок.
❓ А что будет с сайтом, если мы переключили шаблон на другой?
На старых долгоживущих проектах нередко структура пунктов меню большая и запутанная. Если мы сделали новый шаблон сайта и переключили его в админке — у нас послетают все наши переопределения. И они не будут работать до тех пор, пока мы не прощёлкаем все пункты меню и не пересохраним их. Так, чтобы в их url теперь был new-template:samolet в параметре layout.
И тут мне вспомнился механизм работы с макетами в модулях, где мы можем положить свой макет как в папку с модулем. так и в папку с переопределением. В обоих случаях мы можем его использовать.
Если макет лежит в папке с модулем
- Он работает
- Его можно переопределить в шаблон (хотя зачем, это же наш макет)
- Он не изменится при смене шаблона
- ⛔️ Минус — неудобно в работе, когда все макеты разложены по своим модулям и нужно прыгать по папкам в проекте
Макеты лежат в папке html шаблона
- всё рядышком
- типовой подход Joomla (хотя и предыдущий тоже типовой)
удобно для типовых шаблонов — сделал комплект переопределений в своём шаблоне и таскаешь из проекта в проект - ⛔️ неудобно, когда впереди большая работа по смене шаблона и нельзя, чтобы сразу послетало всё из‑за смены шаблона.
Создание своего макета вывода данных Joomla в папке ядра
Я решил провести мини‑эксперимент, в целом заранее зная его результат: положить «переопределение» материала не в html/com_content шаблона, а в папку с компонентом. Точь‑в-точь как с модулями.
Оно работает. Мы создаём собственный тип вывода контента, не привязанный к конкретному шаблону. URL нашего пункта меню будет без двоеточия и имени шаблона. Просто index.php?option=com_content&view=category&layout=samolet.
И знаете, это повод задуматься о применении этой возможности, хотя раньше я бы первым закричал: «Вы что‑о-о?!?! Нельзя‑а-а!»
Когда у нас проект, где:
- не сложная структура
- переопределения макетов в шаблоне делаются один раз на несколько лет
- их (переопределений и новых типов пунктов меню) МАЛО...
..здесь положить всё в шаблон сам Бог велел.
Когда же:
- сложная структура меню
- в ней много разных ТИПОВ пунктов меню
- и все они норовят зависеть от шаблона...
... поневоле задумываешься о том, что ведь можно и же и в папку ядра положить свои файлики...
Риски есть — когда‑нибудь кто‑нибудь добавит в ядро файл с совпадающим именем. Но это решается брендированным префиксом в именах файлов.
При обновлении эти файлы не затираются — проверил сценарий обновления.
🤔 В общем, это скорее философские вопросы о разграничении ответственности и кто эту ответственность на себя берёт, кто это будет поддерживать, документировать и следить за тем, чтобы практике проекта следовали коллеги.
Эта заметка на сайте автора и на Хабре.