跳至主要内容
版本:5.1

步骤 2 添加 tmpl 文件

简介

在此步骤中,我们将 tmpl 文件添加到模块中,并介绍 Joomla 的模板覆盖概念。

源代码可在 mod_hello 步骤 2 中找到。

tmpl 文件和模板覆盖

我们将简单的语句 echo "<h4>Hello</h4>"; 更改为以下内容

mod_hello/src/Dispatcher/Dispatcher.php
<?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

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 文件副本的位置,您可以通过展开资源管理器视图来查看。

mod_hello template override

当您单击 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 命名空间

mod_hello/mod_hello.php
use Joomla\CMS\Helper\ModuleHelper;
...
require ModuleHelper::getLayoutPath('mod_hello');

您可以在 命名空间 部分阅读 Joomla 如何实现命名空间。

特别是 从 Joomla 完整限定名称到源文件的映射 使我们能够快速找到任何 Joomla 类的来源。例如,\Joomla\CMS\Helper\ModuleHelper 位于 libraries/src/Helper/ModuleHelper.php 中。

清单文件更新

由于我们在源文件集中引入了一个新文件夹,因此我们需要告诉 Joomla 安装程序处理它

mod_hello/mod_hello.xml
<?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 文件的更新将不可见。