
Joomla 4 значительно упростила архитектуру расширений, сохранив при этом гибкость и расширяемость. Пользовательские модули в этой версии CMS интегрируются в структуру сайта через стандартную файловую организацию и декларативные манифесты, что ускоряет разработку и облегчает сопровождение.
Для регистрации модуля в системе достаточно упаковать эти файлы в ZIP-архив и установить его через административную панель. Важно использовать пространство имён Joomla\CMS и соблюдать PSR-4-структуру при подключении классов и библиотек. Это обеспечит совместимость с ядром и сторонними расширениями.
Рекомендуется сразу включать поддержку настроек в mod_имямодуля.xml, используя теги <fields> и <field>. Это позволит гибко управлять поведением модуля без необходимости редактировать код. Также важно использовать стандартные механизмы безопасности Joomla, например defined(‘_JEXEC’) or die;, чтобы предотвратить несанкционированный доступ к файлам модуля.
Структура файлов и папок пользовательского модуля

Корень пользовательского модуля должен содержать строго определённые файлы и папки для корректной работы в Joomla 4. Ниже представлена минимальная необходимая структура:
| mod_названиемодуля.php | Точка входа модуля. Подключает вспомогательные файлы, выполняет основную логику и отображение. |
| helper.php | Класс с методами для получения данных. Обычно содержит метод getData(), вызываемый из основного файла. |
| mod_названиемодуля.xml | Файл манифеста. Описывает структуру, параметры, файлы модуля и инструкции установки. |
| language/ | Каталог с языковыми файлами. Например: language/ru-RU/ru-RU.mod_названиемодуля.ini. |
Файл mod_названиемодуля.php не должен содержать HTML-кода – он только передаёт данные в шаблон. В helper.php рекомендуется использовать статические методы, чтобы избежать создания экземпляров класса. Шаблоны располагаются в tmpl/; при наличии нескольких вариантов отображения переключение происходит через параметр layout в файле манифеста.
Файл mod_названиемодуля.xml должен включать секции <files>, <languages> и <config>. Последняя определяет параметры, доступные в админке. Для локализации обязательны INI-файлы с соответствующими префиксами.
Следование этой структуре обеспечивает совместимость модуля с системой обновлений Joomla и корректную интеграцию в административный интерфейс.
Создание XML-манифеста модуля

Файл манифеста – обязательный компонент пользовательского модуля Joomla 4. Он размещается в корне папки модуля и имеет расширение .xml. Имя файла должно совпадать с названием модуля, например: mod_example.xml.
Корневой тег – <extension> с атрибутом type="module". Укажите version="4.0" и method="upgrade", чтобы поддерживать обновление модуля.
Тег <name> должен содержать уникальное имя модуля. <author>, <version> и <description> помогают идентифицировать модуль, но их содержимое не влияет на функциональность.
Внутри <files> перечисляются все файлы, включая PHP, шаблоны и вспомогательные скрипты. Укажите главный файл с атрибутом module="mod_example.php". Пример:
<files>
<filename module="mod_example.php">mod_example.php</filename>
<filename>helper.php</filename>
<folder>tmpl</folder>
</files>
Секция <languages> используется для подключения языковых файлов. Указывайте относительные пути:
<languages>
<language tag="en-GB">language/en-GB/en-GB.mod_example.ini</language>
</languages>
Чтобы модуль отображался в панели администратора, добавьте <config> с элементами формы. Если конфигурация не требуется, включите пустой тег: <config />.
Для правильной установки необходимо наличие файла mod_example.php и директории tmpl с шаблоном по умолчанию – default.php. Их отсутствие приведёт к ошибке установки.
Файл манифеста должен строго соответствовать XML-структуре. Нарушение порядка или пропущенные обязательные теги приведут к сбою установки. Рекомендуется проверять файл валидатором XML перед загрузкой модуля в систему.
В точке входа модуля – файле mod_custommodule.php – подключение шаблона осуществляется следующим образом:
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'), ENT_QUOTES, 'UTF-8');
require JModuleHelper::getLayoutPath('mod_custommodule', $params->get('layout', 'default'));
Если необходимо использовать альтернативный шаблон, укажите его имя в параметре layout XML-манифеста модуля или через настройки модуля в административной панели. Альтернативный файл должен быть размещён в /tmpl/имя_шаблона.php.
Все данные, подготовленные в mod_custommodule.php, должны быть переданы в шаблон через переменные. Для соблюдения изоляции логики и представления, обработку данных выполняйте до вызова шаблона. Например:
$items = CustomModuleHelper::getItems();
require JModuleHelper::getLayoutPath('mod_custommodule');
Обработка пользовательских параметров в админке

Для добавления настраиваемых параметров модуля в Joomla 4 используется файл mod_имя_модуля.xml. Внутри тега <config> определяются поля формы, которые отображаются в административной части.
- Создайте секцию
<fields name="params">. Все параметры должны находиться внутри этой области. - Используйте теги
<field>с нужными атрибутами:name,type,label,default,description. - Поддерживаются типы:
text,list,radio,checkboxes,textarea,media,spacerи др.
Пример поля со списком:
<field
name="display_mode"
type="list"
label="MOD_MYMODULE_DISPLAY_MODE_LABEL"
default="compact"
description="MOD_MYMODULE_DISPLAY_MODE_DESC">
<option value="compact">Компактный</option>
<option value="detailed">Подробный</option>
</field>
Чтобы использовать параметры в коде модуля, получайте их из объекта Joomla\Registry\Registry, передаваемого в mod_mymodule.php:
$displayMode = $params->get('display_mode', 'compact');
Для валидации и локализации:
- Добавьте строки перевода в файл
language/ru-RU/mod_mymodule.ini. - Используйте
validate="...“иrequired="true"в теге<field>при необходимости.
Если требуется сложная логика отображения или зависимости между полями, используйте JavaScript в файле admin-script.js и подключите его через media.
После сохранения параметров в админке Joomla сериализует данные и сохраняет в базе в поле params таблицы #__modules.
Для отладки структуры параметров удобно использовать метод print_r($params->toArray()) в шаблоне модуля.
Работа с базой данных внутри модуля

Для взаимодействия с базой данных в модуле Joomla 4 используется объект \Joomla\CMS\Factory::getDbo(). Это позволяет использовать стандартный API Joomla для выполнения безопасных запросов без прямого обращения к MySQL.
Чтобы получить данные из таблицы базы, создайте экземпляр конструктора запросов:
use Joomla\CMS\Factory;
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName(['id', 'title']))
->from($db->quoteName('#__content'))
->where($db->quoteName('state') . ' = 1')
->order($db->quoteName('created') . ' DESC')
->setLimit(5);
$db->setQuery($query);
$results = $db->loadObjectList();
Используйте quoteName() для экранирования имен столбцов и таблиц, quote() – для значений. Это предотвращает SQL-инъекции. Пример добавления условия с параметром:
$query->where($db->quoteName('catid') . ' = ' . $db->quote($categoryId));
При необходимости вставки данных используйте insert и set:
$columns = ['title', 'alias', 'state'];
$values = [$db->quote($title), $db->quote($alias), 1];
$query = $db->getQuery(true)
->insert($db->quoteName('#__mytable'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
$db->setQuery($query);
$db->execute();
Для получения одного значения используйте loadResult(), для одной строки – loadObject(). Пример получения количества записей:
$query = $db->getQuery(true)
->select('COUNT(*)')
->from($db->quoteName('#__content'))
->where($db->quoteName('state') . ' = 1');
$db->setQuery($query);
$count = (int) $db->loadResult();
Все запросы следует оборачивать в конструкцию try/catch для обработки ошибок:
try {
$db->setQuery($query);
$items = $db->loadObjectList();
} catch (\RuntimeException $e) {
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
}
Избегайте прямого использования SQL-строк. Использование API Joomla обеспечивает переносимость, безопасность и поддержку абстракции от СУБД.
Подключение скриптов и стилей в модуле

Для подключения внешних скриптов и стилей в модуле Joomla 4, нужно правильно использовать API фреймворка, чтобы избежать конфликтов с другими расширениями и гарантировать корректную работу на разных страницах сайта.
Используйте методы JHtml для стилей и скриптов. Важно подключать их в нужный момент жизни страницы, а не в шаблоне. Так, для подключения CSS и JavaScript лучше использовать событие onContentPrepare или методы в файле модуля.
Для подключения стилей используйте функцию JHtml::_('stylesheet', 'путь_к_стилю');. Если стиль должен быть подключён только на определённой странице, можно проверять текущий компонент с помощью JFactory::getApplication()->input->get('option');.
Для JavaScript используйте аналогичную функцию: JHtml::_('script', 'путь_к_скрипту');. Также важно помнить, что скрипты должны быть подключены в конце страницы для улучшения производительности. Для этого можно использовать JFactory::getDocument()->addScriptDeclaration, чтобы вставить код непосредственно в HTML.
Если необходимо подключить сторонние библиотеки, такие как jQuery или Bootstrap, убедитесь, что они не конфликтуют с уже используемыми библиотеками. Для этого можно использовать метод JHtml::_('jquery.framework');, который подключает библиотеку только в случае её отсутствия.
Кроме того, рекомендуется добавлять версию стилей и скриптов в запросы для предотвращения кеширования старых файлов, например: JHtml::_('stylesheet', 'style.css?v=1.0');.
Важным моментом является использование системных методов для добавления стилей и скриптов в заголовок страницы, а не прямое добавление тегов в HTML-шаблон модуля, так как это способствует лучшей интеграции с системой и её кешированию.
Установка и отладка пользовательского модуля

После разработки пользовательского модуля для Joomla 4 необходимо пройти этапы установки и отладки. Эти шаги помогут проверить работоспособность и корректность функционирования модуля на реальном сайте.
Для установки модуля в Joomla 4 выполните следующие шаги:
- Перейдите в админпанель Joomla.
- Откройте меню «Расширения» и выберите «Установить».
- В разделе «Загрузить файл пакета» выберите архив с модулем на вашем компьютере и нажмите «Загрузить и установить».
- После успешной установки появится уведомление. Перейдите в раздел «Менеджер расширений» и выберите «Модули», чтобы увидеть ваш новый модуль.
Теперь модуль можно активировать и настроить. Важно убедиться, что он установлен в нужной позиции, и настроены все необходимые параметры.
Отладка модуля

Если модуль не работает как ожидается, используйте следующие методы для отладки:
- Включение отображения ошибок: В Joomla можно включить отображение ошибок для диагностики. Перейдите в «Конфигурация» → «Сервер» и установите «Отображать ошибки» в положение «Да».
- Логирование: Включите логирование ошибок в настройках Joomla. Логи можно найти в папке
logs, что поможет вам отследить причины сбоя. - Проверка на ошибки JavaScript: Используйте консоль разработчика в браузере (F12), чтобы увидеть ошибки JavaScript, которые могут мешать корректной работе модуля.
- Проверка кода шаблона: Иногда проблема заключается в конфликте модуля с используемым шаблоном. Отключите шаблон и проверьте, работает ли модуль на стандартном.
Если модуль использует AJAX-запросы, убедитесь, что они корректно отправляются и обрабатываются. Также проверьте правильность путей к файлам и правильность работы с базой данных.
Если все предыдущие шаги не помогли, используйте режим разработчика в Joomla, чтобы проверить, какие запросы и данные передаются на сервер.
После отладки обязательно проведите повторное тестирование модуля, чтобы убедиться в его работоспособности в различных браузерах и на разных устройствах.
Вопрос-ответ:
Как создать свой пользовательский модуль для Joomla 4?
Для создания пользовательского модуля в Joomla 4, нужно выполнить несколько шагов. Начать следует с создания каталога в папке «modules» вашего сайта Joomla. Затем создайте необходимые файлы, такие как XML-файл для описания модуля, PHP-файл для функционала и, если требуется, файл стилей CSS. В XML-файле указывается информация о модуле, его настройках и выводе, а в PHP-файле реализуется логика работы модуля. После этого модуль можно установить через административную панель Joomla.
Что нужно учитывать при создании модуля для Joomla 4?
При разработке модуля для Joomla 4 важно учитывать несколько ключевых факторов. Во-первых, следует использовать структуру и стандарты Joomla, чтобы модуль был совместим с системой и обновлениями. Во-вторых, необходимо учесть безопасность, избегая использования небезопасных функций и данных, которые могут привести к уязвимостям. Также важно продумать возможности настройки модуля, чтобы администраторы могли легко управлять его функционалом через панель управления. Наконец, стоит позаботиться о производительности, чтобы модуль не замедлял работу сайта.
Как настроить параметры пользовательского модуля в Joomla 4?
Настройка параметров модуля в Joomla 4 осуществляется через XML-файл, который описывает настройки модуля. В нем можно указать различные параметры, такие как заголовок, описание, стили и другие опции, которые будут отображаться в административной панели Joomla. Чтобы добавить параметр, необходимо использовать теги
Как добавить обработку пользовательского ввода в модуль Joomla 4?
Для обработки пользовательского ввода в модуле Joomla 4 нужно создать форму в PHP-файле модуля, используя стандартные элементы HTML, такие как ,
