Классы расширения и диспетчера для модулей выполняют те же функции, что и для компонентов, но они проще, потому что Joomla создает экземпляры этих классов только с целью выполнения модуля для получения выходных данных (иначе говоря, рендеринга модуля).

Доступ к экземпляру класса расширения осуществляется аналогичным образом

$module = $app->bootModule($moduleName, $applicationName);

где $moduleName это имя модуля (например, 'mod_example') и $applicationName это "site" или "administrator".

Класс расширения модуля по умолчанию определен в libraries/src/Extension/Module.php, и на самом деле он просто предоставляет механизм для доступа к другим классам:

  • класс Dispatcher (через объект DispatcherFactory) и,
  • собственный вспомогательный класс модуля (через объект HelperFactory)

Подобно компонентам, класс диспетчера модулей содержит dispatch() функция, которая используется для запуска кода модуля.

$module->getDispatcher($mod, $app)->dispatch();

Здесь $mod является объектом PHP stdClass, представляющим модуль, включая такие данные, как имя модуля, идентификатор модуля, заголовок модуля, позицию в шаблоне и $app является экземпляром приложения.

Класс диспетчера модуля по умолчанию определен в libraries/src/Dispatcher/ModuleDispatcher.php

Код Joomla в классе Dispatcher предоставляет модулю копии ряда ключевых элементов данных (которые модуль может счесть полезными).:

  • модуль stdClass, описанный выше
  • экземпляр приложения
  • входные данные – параметры запроса, связанные с URL - адресом (option, view, и т.д.)
  • params – параметры модуля
  • template – название шаблона

В отличие от Joomla 3, в Joomla 4 эти элементы данных являются копиями, поэтому, изменяя их, вы не меняете исходные элементы данных.

В общем, вы, вероятно, обнаружите, что можете использовать классы расширения модуля по умолчанию и диспетчера, и вы можете просто предоставить (например, для mod_example)

  • XML-файл манифеста модуля - mod_example.xml
  • файл точки входа в модуль – mod_example.php, содержащий только PHP-код, а не класс
  • вспомогательный файл модуля (с кодом для получения необходимых данных) – класс с пространством имен в src / Helper/
  • файл tmpl, содержащий HTML для вывода – в разделе tmpl /, например tmpl/default.php