Здравствуйте, товарищи. Данная статья - курс молодого бойца по разработке шаблонов Joomla 2.5 / Joomla 3 "с нуля" с использованием штатных средств CMS без применения сторонних фреймворков. В этом пособии НЕ будут вложены файлы с исходниками, т.к. оно направлено на ОБУЧЕНИЕ разработчиков, а не на предоставление заготовок для разработки шаблонов. Название тестового шаблона: myTemplate. Шаг 1: Создаем структуру шаблона (пустые файлы) myTemplate/ html/ html/modules.php html/index.htm images/ images/index.htm css/ css/main.css css/index.htm scripts/ scripts/index.htm language/ index.php templatedetails.xml Папка HTML: Здесь содержится файл, который определяет формат вывода модулей Joomla (modules.php). Так же в эту папку помещаются папки компонентов и модулей, которые нужно кастомизировать при выводе на страницу (изменить Layout компонента/модуля по-умолчанию). Папка images: Все картинки, используемые в шаблоне. Папка styles: Все файлы стилей, используемые в шаблоне. Папка scripts: Все JavaScript-файлы, используемые в шаблоне. Папка language: Содержит языковые файлы, доступные в шаблоне. Они могут использоваться, например, для перевода текста полей для настройки шаблона через админку или при переводе описания шаблона. Файл index.php: Входной файл шаблона. Здесь содержится HTML страниц Вашего шаблона, включаемые области Joomla (JDOC)*. Шаг 2: Файл index.php Типичная структура файла: Код (html): <!DOCTYPE html> <html> <head> <jdoc:include type="head" /> <link href="<?php echo $this->baseurl(); ?>/templates/<?php echo $this->template(); ?>/styles/main.css" type="text/css" rel="stylesheet" /> </head> <body> <div class="wrapper"> <header> <jdoc:include type="modules" name="block-1" /> </header> <nav role="navigator"> <jdoc:include type="modules" name="block-2" /> </nav> <div id="middle"> <?php if($this->countModules("block-3")) { ?> <div id="col-left"> <jdoc:include type="modules" name="block-3" /> </div> <div id="col-right"> <jdoc:include type="message" /> <main role="main"> <jdoc:include type="component" /> </main> </div> <?php } else { ?> <main role="main"> <jdoc:include type="component" /> </main> <?php } ?> </div> <footer> <jdoc:include type="modules" name="block-4" /> </footer> </div> </body> </html> jdoc:include Позиция для вывода динамического содержимого страницы. Отличаются в зависимости от значения атрибута type: head: стили, скрипты и meta-теги и прочая инфо. области <head> modules: модули (админ-панель: Расшерения - Менеджер модулей). Дополнительный атрибуты: name: имя позиции вывода моделей. Не забывайте указать его в templateDetails. style: стиль вывода модуля (templates/myTemplate/html/modules.php) component: вывод основного содержимого, контента страницы (материалы, блоги категорий и т.п.) messages: сообщения системы (ошибки, успех, предупреждения) $this->baseurl(); Выводит путь до корневой директории сайта (корневая папка). $this->template(); Выводит название шаблона, установленного по-умлочанию. $this->countModules("название_позиции"); Определяет есть ли модуль в указанной позиции и опубликован ли он. Возвращает true, если модель есть и false, если нет. ШАГ 3: Файл templateDetails.xml Этот файл находится в корневой папке шаблона и при инсталяции предоставляет системе (CMS) информацию о его структуре: - информация от авторе (имя, веб-сайт, контактный e-mail...); - информация о лицензии, используемой при распространении шаблона в Интернет; - список файлы и папки входят в состав шаблона; - список доступных языковых файлов; - список полей, доступных для настройки параметров шаблона через админку; Типичный файл templateDetails.xml для Joomla 3: Код (xml): <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE install PUBLIC "-//Joomla! 2.5//DTD template 1.0//EN" "[URL='http://http://www.joomla.org/xml/dtd/1.6/template-install.dtd']http://www.joomla.org/xml/dtd/1.6/template-install.dtd"> <extension version="3.1" type="template" client="site"> <name>myTemplate</name> <creationDate>31 November 2019</creationDate> <author>Ivan Petrov</author> <authorEmail>adres@pochty.ogo</authorEmail> <authorUrl>[URL='http://http://www.pri.mer</authorUrl>']http://www.pri.mer</authorUrl> <copyright>Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <version>3.1.0</version> <description>Текст описания шаблона для вывода в админке</description> <files> <folder>css</folder> <folder>html</folder> <folder>images</folder> <folder>scripts</folder> <folder>language</folder> <filename>index.php</filename> <filename>templateDetails.xml</filename> <filename>favicon.ico</filename> </files> <positions> <position>block-1</position> <position>block-2</position> <position>block-3</position> <position>block-4</position> </positions> <languages folder="language"> <language tag="en-GB">en-GB/en-GB.tpl_mytemplate.ini</language> <language tag="en-GB">en-GB/en-GB.tpl_mytemplate.sys.ini</language> </languages> <config> <fields name="params"> <fieldset name="advanced"> <field name="wrapperSmall" class="validate-numeric" type="text" default="53" label="TPL_MYTEMPLATE_FIELD_WRAPPERSMALL_LABEL" description="TPL_MYTEMPLATE_FIELD_WRAPPERSMALL_DESC" filter="integer" /> <field name="logo" type="media" label="TPL_MYTEMPLATE_FIELD_LOGO_LABEL" description="TPL_MYTEMPLATE_FIELD_LOGO_DESC" /> <field name="templatecolor" type="list" default="nature" label="TPL_MYTEMPLATE_FIELD_TEMPLATECOLOR_LABEL" description="TPL_MYTEMPLATE_FIELD_TEMPLATECOLOR_DESC" filter="word" > <option value="nature">TPL_MYTEMPLATE_OPTION_NATURE</option> <option value="personal">TPL_MYTEMPLATE_OPTION_PERSONAL</option> <option value="red">TPL_MYTEMPLATE_OPTION_RED</option> <option value="turq">TPL_MYTEMPLATE_OPTION_TURQ</option> <option value="image">TPL_MYTEMPLATE_OPTION_IMAGE</option> </field> <field name="backgroundcolor" type="color" default="#eee" label="TPL_MYTEMPLATE_FIELD_HEADER_BACKGROUND_COLOR_LABEL" description="TPL_MYTEMPLATE_FIELD_HEADER_BACKGROUND_COLOR_DESC" /> </fieldset> </fields> </config> </extension> Итак, мы создали минимальный набор для инсталяции шаблона в CMS. Запаковав файлы и папки в архив формата ZIP можно установить наш шаблон обычным методом через админку: Расширения -> Менеджер расширений -> Загрузить файл пакета. ШАГ 4: Стили вывода модулей (modules.php) Для вывода на страницу сайта меню, форм, последних новостей и т.п. в Joomla используются модули. Все модули, установленные в CMS находится в папке modules, в корневой директории CMS. При выводе модуля на страницу, мы можем изменять его отображения, управляя им через админку: показать/скрыть заголовок; добавить ID или суффикс к CSS-классу модуля; включить/выключить кеширование модуля; ... Мы можем управлять оболочкой модуля и стилем вывода его информации, указав при вставке на страницу позиции модуля атрибут style: Код (html): <jdoc:include type="modules" name="block-1" style="html5" /> Стандартный системный файл с перечислением всех доступных стилей вывода модулей можно посмотреть здесь: Объясняя на пальцах - принцип работы такой: если функция называется modChrome_xyz - в атрибуте style блока JDOC мы указываем xyz: Для того, чтобы создать свой стили - нужно создать файл modules.php в папке своего шаблона: Пример содержания файла: Код (PHP): <?php defined('_JEXEC') or die('Отказано в доступе'); function modChrome_simple($module, &$params, &$attribs) { ?> <div<?php if($params->get('moduleclass_sfx')) { ?> class="<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>"<?php } ?>> <div class="spacer"> <?php if ($module->showtitle) { ?> <div class="title"> <?php echo $module->title; ?> </div> <div class="content"> <?php echo $module->content; ?> </div> <?php } else { echo $module->content; } ?> </div> </div> <?php } ?> ПРОДОЛЖЕНИЕ СЛЕДУЕТ... ____________________________ СНОСКИ: * включаемые области Joomla (JDOC) - служебная разметка шаблонов Joomla, обозначающая места для вставки кода модулей (type="modules") или компонентов (type="component"). Так же используется для вставки системных файлов в область страницы <head> (type="head") и вывода системных сообщений (type="message").