03 - Классы расширения и диспетчера для модулей
Классы расширения и диспетчера для модулей выполняют те же функции, что и для компонентов, но они проще, потому что 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