dede php 包含文件

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 DEDE建站 正文

在 PHP 项目中,包含文件是模块化、复用代码和提高开发效率的核心操作,DedeCMS 也不例外,它本身大量使用了文件包含机制来组织其庞大的代码库。

dede php 包含文件
(图片来源网络,侵删)

DedeCMS 中包含文件的几种方式

PHP 提供了四种主要的包含/引入函数,它们在 DedeCMS 中都有应用:

  1. include(): 包含并运行指定文件,如果文件不存在,PHP 会发出一个警告 (E_WARNING),但脚本会继续执行。
  2. include_once(): 功能同 include(),但会先检查该文件是否已经被包含过,如果包含过,则不会再次包含,可以防止重复定义函数或类的问题。
  3. require(): 包含并运行指定文件,如果文件不存在,PHP 会发出一个致命错误 (E_COMPILE_ERROR),并停止脚本的执行
  4. require_once(): 功能同 require(),但同样会检查文件是否已被包含过,防止重复定义。

在 DedeCMS 模板中包含文件

这是最常见的情况,尤其是在制作网站模板时,DedeCMS 使用自己的模板引擎,所以语法与原生 PHP 不同。

使用 DedeCMS 模板标签 {dede:include}

这是 DedeCMS 官方推荐且最标准的模板包含方式,它会在模板解析时,将指定文件的内容“嵌入”到当前位置。

语法:

dede php 包含文件
(图片来源网络,侵删)
{dede:include file='文件路径' ismake='是否为目录'}
  • file='文件路径': 指定要包含的文件路径,这个路径是相对于 DedeCMS 安装根目录的。
  • ismake='是否为目录': (可选) 如果值为 yes,则 file 参数被视为一个目录,DedeCMS 会自动包含该目录下的 index.html 文件,这对于包含公共的头部或尾部非常方便。

示例:

假设你的网站结构如下:

/wwwroot/your_dede_site/
├── templets/
│   └── default/
│       ├── index.htm
│       ├── head.htm
│       └── foot.htm
├── dede/
└── ...

index.htm 中,你想要包含 head.htmfoot.htm

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">{dede:global.cfg_webname/}</title>
</head>
<body>
    <!-- 使用 {dede:include} 包含头部文件 -->
    {dede:include file='templets/default/head.htm'/}
    <main>
        <!-- 这里是首页的主要内容 -->
        <h1>欢迎来到我的网站</h1>
        {dede:arclist titlelen='30' row='5'}
        <li><a href="[field:arcurl/]">[field:title/]</a></li>
        {/dede:arclist}
    </main>
    <!-- 使用 {dede:include} 包含底部文件 -->
    {dede:include file='templets/default/foot.htm'/}
</body>
</html>

使用 ismake 属性的示例:

如果你的 templets/default/ 目录下有 head.htm,你可以这样写:

{dede:include file='templets/default/' ismake='yes'/}

DedeCMS 会自动找到并包含 templets/default/index.htm,如果你的头部文件是 head.htm,这种方式就不适用了,需要明确写出文件名。


使用原生 PHP 语句

在某些情况下,你可能需要在 DedeCMS 的模板文件(.htm)中直接执行 PHP 代码,这通常用于非常特殊的逻辑,不推荐在模板中过多使用,因为它会破坏模板与逻辑分离的原则。

开启 PHP 支持: 默认情况下,.htm 文件中的 <?php ... ?> 代码可能不会被执行,你需要确保你的模板文件被正确解析,一个简单的方法是,将需要包含 PHP 代码的模板文件后缀名改为 .php

示例:

假设你有一个 helper.php 文件,里面定义了一个函数:

// /wwwroot/your_dede_site/include/helper.php
function getGreeting() {
    return "你好,这是一个动态问候!";
}

在你的模板文件 index.php 中,你可以这样包含和使用它:

<!DOCTYPE html>
<html>
<head>原生 PHP 包含示例</title>
</head>
<body>
    <h1>首页</h1>
    <?php
    // 包含 helper.php 文件
    include_once '/wwwroot/your_dede_site/include/helper.php';
    // 调用函数并输出结果
    echo getGreeting();
    ?>
</body>
</html>

注意: 使用这种方式时,路径必须是服务器上的绝对路径,或者相对于当前执行脚本的路径,使用绝对路径 ($_SERVER['DOCUMENT_ROOT'] 是一个好方法) 更安全。


在 DedeCMS PHP 源码文件中包含文件

这是指修改 DedeCMS 后台程序、插件或核心功能文件(通常是 .php 文件)时的包含方式,这里直接使用原生 PHP 语句。

场景:

  • 在一个自定义的插件文件中,需要用到 DedeCMS 的核心类库(如 dedeapi.class.php)。
  • 在一个栏目页文件中,需要引入一个公共的功能模块。

示例:

假设你在 plus/my_api.php 文件中工作,需要使用 DedeCMS 的数据库操作类。

<?php
/**
 * 自定义API文件
 */
// 1. 定义 DedeCMS 的根目录路径
// define('DEDEROOT', dirname(__FILE__) . '/..'); // 根据实际情况调整
define('DEDEROOT', dirname(__FILE__)); // my_api.php 在 dede 目录下
// 2. 引入核心配置文件,获取数据库连接信息等
require_once DEDEROOT . '/include/common.inc.php';
// 3. 引入需要的类文件
// 要使用数据库操作类
require_once DEDEROOT . '/dede/archives.class.php';
// ... 你的业务逻辑代码 ...
// 使用引入的类
$archives = new Archives($dsql);
// ... 进行操作 ...
?>

最佳实践:

  • 使用绝对路径:通过 dirname(__FILE__) 来获取当前文件所在的目录,然后拼接出目标文件的绝对路径,这是最可靠的方式。
  • 优先使用 require_once:在引入类库、函数库时,使用 require_once 可以有效防止因重复引入而导致的“函数已定义”或“类已声明”的致命错误。
  • 引入核心文件:在开发 DedeCMS 扩展时,几乎总是需要先引入 include/common.inc.php,这个文件负责初始化环境、连接数据库、加载常用函数等。

总结与最佳实践

场景 推荐方法 优点 缺点
模板文件 (.htm) {dede:include} 官方支持,符合模板引擎逻辑,安全,易于维护。 功能相对固定,灵活性不如原生 PHP。
模板文件中少量 PHP 原生 PHP (include/require) 灵活性高,可以执行任意 PHP 代码。 破坏模板与逻辑分离,可能带来安全隐患,需要将文件改为 .php
PHP 源码文件 (.php) 原生 PHP (require_once) 功能强大,性能高,是 PHP 开发的标准做法。 需要手动管理路径,路径错误会导致致命错误。

核心建议:

  1. 模板与逻辑分离:尽量保持模板文件(.htm)的纯粹性,只负责展示,复杂的逻辑处理放在 PHP 文件中。
  2. 模板优先用 {dede:include}:在模板中复用头部、底部、侧边栏等组件时,首选 {dede:include}
  3. 源码优先用 require_once:在修改 DedeCMS 的 PHP 源码时,使用 require_once 引入依赖文件,并务必使用绝对路径。
  4. 路径是关键:无论使用哪种方式,确保文件路径的正确性是避免错误的首要任务,在 PHP 源码中,dirname(__FILE__) 是你的好朋友。

通过合理运用这些包含文件的方法,你可以构建出结构清晰、易于维护和扩展的 DedeCMS 网站。

-- 展开阅读全文 --
头像
dede list如何正确添加日期显示?
« 上一篇 今天
dede sql标签变量如何正确使用?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码