Прочитать с ИИ

Короткий промпт для резюме, выводов и применения к вашей задаче.

ChatGPT Claude

Мы все знаем, что при работе с сайтом создание своих переопределений стандартных макетов — это типовая, стандартная работа. Она позволяет сделать из материалов, контактов почти всё, что угодно.

И так же мы знаем, что по классике эти переопределения кладутся в папку 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.

И знаете, это повод задуматься о применении этой возможности, хотя раньше я бы первым закричал: «Вы что‑о-о?!?! Нельзя‑а-а!»

Когда у нас проект, где:

  • не сложная структура
  • переопределения макетов в шаблоне делаются один раз на несколько лет
  • их (переопределений и новых типов пунктов меню) МАЛО...

..здесь положить всё в шаблон сам Бог велел.

Когда же:

  • сложная структура меню
  • в ней много разных ТИПОВ пунктов меню
  • и все они норовят зависеть от шаблона...

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

Риски есть — когда‑нибудь кто‑нибудь добавит в ядро файл с совпадающим именем. Но это решается брендированным префиксом в именах файлов.

При обновлении эти файлы не затираются — проверил сценарий обновления.

🤔 В общем, это скорее философские вопросы о разграничении ответственности и кто эту ответственность на себя берёт, кто это будет поддерживать, документировать и следить за тем, чтобы практике проекта следовали коллеги.

Статья по теме

Создание шаблонов сайта в Joomla 4+

Ранее были опубликованы статьи Создание модулей с учётом новой структуры Joomla 4Создание плагинов с учётом новой структуры Joomla 4, где освещались нюансы по апгрейду расширений до архитектуры Joomla 4 / Joomla 5. А также статья Создание плагина кнопки редактора в Joomla 4, в которой в том числе затрагиваются вопросы распределения функционала между фронтом и бэком, приводится практический пример работы с ajax нативными для Joomla средствами. Однако, расширение типа template, пожалуй, создаётся для сайтов на Joomla чаще, чем другие типы расширений.

Первоначально статья была опубликована на Хабре. Копирую к себе.

Об авторе

Толкачев Сергей Юрьевич

Толкачев Сергей Юрьевич

Joomla-разработчик. Контрибьютер ядра Joomla. Один из ведущих Telegram-канала русскоязычного Joomla-сообщества JoomlaFeed, один из модераторов чата русскоязычного Joomla-сообщества. Мои расширения в официальном маркетплейсе расширений Joomla - Joomla Extensions Directory. Имею публикации в официальном журнале международного Joomla-сообщества - Joomla Community Magazine и на официальном сайте русскоязычного Joomla-сообщества.

Муж. Отец 3 детей.

Россия, Саратов.

Расширения Joomla WebTolk

112 Всего расширений
12 Категорий
572 Выпущено версий
830025 Всего скачиваний