DataLife Engine 为接入您开发的脚本扩展提供了便捷机制。这些机制能够在脚本升级到新版本后继续保持可用,因为它们允许在不修改脚本文件的情况下完成接入。要连接您开发的模块,您需要在任意所需模板中添加以下标签:
{include file="engine/modules/mymod.php"}
其中,/engine/modules/ 是您的模块文件路径,而 mymod.php 是要连接的文件名。DataLife Engine 的标准模块文件位于此文件夹中,我们也建议您使用这个目录,不过这并不是强制要求,文件也可以位于服务器上的任何其他文件夹中。此类模块连接唯一的安全限制是:存放该文件的文件夹不能具有写入权限(CHMOD 777)。另外,我们建议您在连接模块时使用相对路径,DataLife Engine 会自动识别相对路径,并依据脚本设置以及脚本安装路径来连接您的模块。这样一来,您就可以为自己的扩展编写通用安装说明。
您还可以在连接模块的 PHP 文件时向其传递不同参数,例如:
{include file="engine/modules/mymod.php?param=value1&variable2=value2"}
借助这种连接方式,您可以让自己的扩展具备多功能特性,使其在不同的连接方式下执行不同角色和功能。传递的变量将在您的模块中分别以 $param 和 $variable2 的形式可用。
作为传递给所连接模块的参数,您也可以使用脚本的模板标签(但不包括在主模板中使用该标签时,以及属于主模板本身的标签)。例如,在完整新闻模板中加入结构 {include file="engine/modules/mymod.php?param={news-id}"} 时,您可以把新闻 ID 等参数传递给第三方模块。开发者请注意: 传递给脚本的参数,本质上等同于浏览器 URL 中的 GET 参数,因此在选择要传递的标签时,必须考虑 GET 字符串的限制。换句话说,您不能例如把完整新闻的正文内容作为参数传递。
您还可以使用自定义模块连接来替换输出新闻及其他主要信息的主内容区。为此,需要把该标签与 [available=分区]文本[/available] 和 [not-available=分区]文本[/not-available] 标签配合使用。有关这些标签的说明,请参阅文档中的“页面上的新闻输出”分区。您既可以使用标准分区列表,也可以通过在浏览器 URL 中传递自定义值来创建网站自己的分区。来看一个最简单的示例。假设您想在网站标准分区之外新增一个分区,并在其中输出来自您模块的信息。例如,您想创建 FAQ 分区。为此,需要在主模板中写入如下结构:
[available=faq]
{include file="engine/modules/mymod.php"}
[/available]
[not-available=faq]
{content}
[/not-available]
完成这样的连接后,除了网站标准分区照常工作之外,当访问地址: http://site.ru/index.php?do=faq 时,将显示来自您模块的新分区内容,而不是新闻列表。
为了让您的模块能够正常工作,并且恰好在模板中插入上述标签的位置输出信息,只需满足一个重要条件:信息输出必须仅通过 PHP 的 echo 函数完成。来看一个最简单模块和信息输出的示例。创建文件 mymod.php,内容如下:
<?php
echo "测试模块";
?>
当在模板中连接此文件后,该模板位置将出现文本: 测试模块
以下是您在所连接模块中无需额外声明即可使用的 DLE 变量和类列表:
$is_logged - 包含访客是已授权用户还是访客的信息,其值为 true 或 false。
$member_id - 包含已授权用户信息的数组,包括其资料中的全部信息。
$db - 用于操作数据库的 DLE 类。
$tpl - 用于操作模板的 DLE 类。
$cat_info - 包含网站所有分类信息的数组。
$config - 包含脚本全部设置的数组。
$user_group - 包含所有用户组及其设置的数组。
$category_id - 包含访客当前正在查看的分类 ID。
$_TIME - 以 UNIX 格式包含当前时间,并考虑脚本设置中的时区偏移。
$lang - 包含语言包文本的数组。
$smartphone_detected - 包含用户当前是通过智能手机还是普通浏览器访问网站的信息,其值为 true 或 false。
$dle_module - 包含用户当前正在查看的网站分区信息,或浏览器 URL 中 do 变量的值。
注意: 您的模块只能读取这些变量中的数据。修改这些变量的值会导致脚本标准功能出现故障,并造成后续运行不正确。