模块的扩展和调度程序类
模块的扩展和调度程序类与组件的类似,但它们更简单,因为 Joomla 实例化这些类仅仅是为了执行模块以捕获输出(即渲染模块)。
扩展类实例的访问方式类似
$module = $app->bootModule($moduleName, $applicationName);
其中 $moduleName
是模块的名称(例如 'mod_example'),$applicationName
是 'site' 或 'administrator'。
默认的模块扩展类定义在 libraries/src/Extension/Module.php 中,它实际上只提供了一种机制来访问其他类
- 调度程序类(通过 DispatcherFactory 对象),以及
- 模块自己的辅助类(通过 HelperFactory 对象)
与组件类似,模块调度程序类包含 dispatch()
函数,该函数用于运行模块的代码。
$module->getDispatcher($mod, $app)->dispatch();
这里 $mod
是一个 PHP stdClass 对象,表示模块,包括模块名称、模块 ID、模块标题、模板位置等数据,$app
是应用程序实例。
默认的模块调度程序类定义在 libraries/src/Dispatcher/ModuleDispatcher.php 中
调度程序类中的 Joomla 代码为模块提供了许多关键数据项的副本(模块可能发现这些数据项很有用)
- 上面描述的模块 stdClass
- 应用程序实例
- 输入数据 - 与 URL 关联的查询参数(
option
、view
等) - params - 模块的参数
- template - 模板的名称
与 Joomla 3 不同,从 Joomla 4 开始,这些数据项是副本,因此如果您更改它们,您不会更改原始数据项。
通常,您可能会发现您可以使用默认的模块扩展和调度程序类,并且您只需提供(例如对于 mod_example)
- 模块清单 XML 文件 - mod_example.xml
- 模块入口点文件 - mod_example.php,仅包含 PHP 代码而不是类
- 模块辅助文件(包含获取所需数据的代码) - src/Helper/ 下的命名空间类
- 包含要输出的 HTML 的 tmpl 文件 - 在 tmpl/ 下,例如 tmpl/default.php