步骤 2 添加 tmpl 文件
简介
在此步骤中,我们将 tmpl 文件添加到模块中,并介绍 Joomla 的模板覆盖概念。
源代码可在 mod_hello 步骤 2 中找到。
tmpl 文件和模板覆盖
我们将简单的语句 echo "<h4>Hello</h4>";
更改为以下内容
<?php
namespace My\Module\Hello\Site\Dispatcher;
\defined('_JEXEC') or die;
use Joomla\CMS\Dispatcher\DispatcherInterface;
use Joomla\CMS\Helper\ModuleHelper;
class Dispatcher implements DispatcherInterface
{
public function dispatch()
{
$hello = "Hello";
require ModuleHelper::getLayoutPath('mod_hello');
}
}
并在 tmpl 子目录中添加文件 default.php
<?php
defined('_JEXEC') or die;
?>
<h4><?php echo $hello; ?></h4>
这比之前复杂多了!为什么要这样操作?答案是它支持模板覆盖。
当 Joomla 输出这样的 HTML 时,它将负责输出 HTML 元素的 PHP 分离到 tmpl 文件中。这样,网站管理员或开发人员就可以更改输出的 HTML 的形式。
例如,对于 mod_hello
,管理员可能更喜欢使用 <h3>
标记而不是 <h4>
来输出 HTML。
安装此版本的 mod_hello
后,您可以转到系统/网站模板,然后单击 Cassiopeia 详情和文件(假设您使用的是默认的 Joomla 网站模板)。然后,您可以单击“创建覆盖”选项卡,您应该在模块列表中找到 mod_hello
。
单击 mod_hello
,您应该会收到一条消息:“在 \templates\cassiopeia\html\mod_hello 中创建覆盖”。这是 Joomla 放置 default.php 文件副本的位置,您可以通过展开资源管理器视图来查看。
当您单击 default.php 时,您将能够编辑该文件,并可以更改 HTML 输出。(如果您决定尝试此操作,请记住之后删除覆盖文件,否则它将继续用于本教程中的后续步骤)。
ModuleHelper::getLayoutPath('mod_hello')
行的作用是在 Joomla 文件系统中查找可能存储覆盖文件的位置,并且仅在找不到时才使用 modules/mod_hello/tmpl/default.php 文件。
另请注意,getLayoutPath
函数返回文件的路径,我们的代码对此文件执行了 PHP require
操作,以便 default.php 代码在与 mod_hello.php 代码相同的 PHP 函数上下文中运行。这意味着在 mod_hello.php 中分配的任何 PHP 变量都可以在 tmpl/default.php 中使用。
命名空间
我们还使用了这样一个事实,即 Joomla 代码使用 PHP 命名空间
use Joomla\CMS\Helper\ModuleHelper;
...
require ModuleHelper::getLayoutPath('mod_hello');
您可以在 命名空间 部分阅读 Joomla 如何实现命名空间。
特别是 从 Joomla 完整限定名称到源文件的映射 使我们能够快速找到任何 Joomla 类的来源。例如,\Joomla\CMS\Helper\ModuleHelper 位于 libraries/src/Helper/ModuleHelper.php 中。
清单文件更新
由于我们在源文件集中引入了一个新文件夹,因此我们需要告诉 Joomla 安装程序处理它
<?xml version="1.0" encoding="UTF-8"?>
<extension type="module" client="site" method="upgrade">
<name>Joomla module tutorial</name>
<version>1.0.2</version>
<author>me</author>
<creationDate>today</creationDate>
<description>Code used in the Joomla module tutorial</description>
<namespace path="src">My\Module\Hello</namespace>
<files>
<folder module="mod_hello">services</folder>
<folder>src</folder>
<folder>tmpl</folder>
</files>
</extension>
安装
完成源文件更新后,您应该将 mod_hello 文件夹压缩并安装更新的模块,如上一节所述。您无需再次指定发布状态、模板位置或菜单分配 - Joomla 将继续使用您之前指定的设置。
当您重新显示网站页面时,您应该会看到模块显示与之前相同,但现在您可以进入管理员后端设置模板覆盖。
但是,如果您确实创建了模板覆盖,请记住之后删除它,否则本教程后面步骤中对 tmpl 文件的更新将不可见。