跳到主要内容
版本:5.1

模块的扩展和调度程序类

模块的扩展和调度程序类与组件的类似,但它们更简单,因为 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 关联的查询参数(optionview 等)
  • params - 模块的参数
  • template - 模板的名称

与 Joomla 3 不同,从 Joomla 4 开始,这些数据项是副本,因此如果您更改它们,您不会更改原始数据项。

通常,您可能会发现您可以使用默认的模块扩展和调度程序类,并且您只需提供(例如对于 mod_example)

  • 模块清单 XML 文件 - mod_example.xml
  • 模块入口点文件 - mod_example.php,仅包含 PHP 代码而不是类
  • 模块辅助文件(包含获取所需数据的代码) - src/Helper/ 下的命名空间类
  • 包含要输出的 HTML 的 tmpl 文件 - 在 tmpl/ 下,例如 tmpl/default.php