织梦extend.fun.php是什么?怎么用?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 织梦建站 正文
  1. 它是什么? - 文件的基本定义和作用。
  2. 它有什么用? - 核心功能和重要性。
  3. 如何使用它? - 详细的代码示例和最佳实践。
  4. 注意事项和最佳实践。

它是什么?

extend.fun.php 是织梦CMS系统预留的一个自定义函数扩展文件

织梦extend.fun.php
(图片来源网络,侵删)
  • 位置:通常位于 /include/ 目录下。
  • 性质:它是一个普通的PHP文件,专门用来存放用户自己编写的函数。
  • 核心思想:为了在不修改织梦核心程序文件(如 /include/helpers/ 下的 archive.helper.php, string.helper.php 等)的前提下,扩展织梦的功能,这遵循了“程序与数据分离”以及“二次开发不修改核心”的原则,使得织梦系统升级时,你的自定义功能不会丢失。

它就是你的“私人工具箱”,你可以把织梦没有提供的、但你在开发模板或功能时需要反复使用的函数,都放到这个文件里。


它有什么用?(核心功能)

extend.fun.php 的核心作用是封装和复用自定义功能,当你发现织梦自带的函数(调用方式如 GetDateTime())无法满足你的需求时,就可以在这里创建你自己的函数。

常见的应用场景包括:

  • 数据处理:对字段内容进行特殊格式化,截取特定长度的文本并添加省略号、过滤HTML标签、将数字转换成中文大写等。
  • 复杂逻辑:根据多个条件判断并返回不同的结果,根据会员等级显示不同的价格或标签。
  • API调用:调用外部接口获取数据(如天气、汇率),并返回给模板。
  • 生成特定内容:生成随机码、唯一ID、特定格式的日期或链接等。
  • 辅助功能:调试函数(如打印变量)、权限检查函数等。

如何使用它?(代码示例)

使用 extend.fun.php 非常简单,主要分为两步:添加函数调用函数

织梦extend.fun.php
(图片来源网络,侵删)

extend.fun.php 中添加你的函数

打开 /include/extend.fun.php 文件,在 <?php?> 之间添加你自己的函数,为了避免与官方未来可能添加的函数重名,建议给你的函数加上特定前缀,my_, custom_ 或你公司/项目的缩写。

示例1:一个简单的文本截取函数

织梦自带的 cn_substr() 函数在处理包含HTML标签的文本时可能会出错,我们可以写一个更安全的版本。

<?php
if(!defined('DEDEINC')) exit('dedecms');
/**
 * 安全截取纯文本内容,忽略HTML标签
 * @param string $str 需要截取的字符串
 * @param int $length 截取长度
 * @param string $dot 超过长度后添加的结尾符
 * @return string
 */
function my_safe_substr($str, $length, $dot = '...')
{
    // 先去除HTML标签
    $str = strip_tags($str);
    // 使用mb_substr进行安全的中文截取
    $str = mb_substr($str, 0, $length, 'utf-8');
    return $str . $str;
}
?>

示例2:一个根据时间显示“刚刚”、“几分钟前”的函数

织梦extend.fun.php
(图片来源网络,侵删)

这个函数在列表页显示文章发布时间时非常实用。

<?php
if(!defined('DEDEINC')) exit('dedecms');
/**
 * 将时间戳格式化为“刚刚”、“几分钟前”等相对时间
 * @param int $timestamp 时间戳
 * @return string
 */
function my_time_format($timestamp)
{
    if (empty($timestamp)) {
        return '';
    }
    $diff = time() - $timestamp;
    if ($diff < 60) {
        return '刚刚';
    } elseif ($diff < 3600) {
        return floor($diff / 60) . '分钟前';
    } elseif ($diff < 86400) {
        return floor($diff / 3600) . '小时前';
    } elseif ($diff < 2592000) { // 30天
        return floor($diff / 86400) . '天前';
    } else {
        // 超过30天,直接返回日期
        return GetDateTime($timestamp);
    }
}
?>

在模板或PHP文件中调用你的函数

一旦函数被添加到 extend.fun.php 中,你就可以在任何地方调用它了,就像调用织梦自带的函数一样。

在模板中调用

织梦模板引擎会自动加载 extend.fun.php 文件,所以你可以在模板文件(.htm)中直接使用。

{dede:arclist titlelen='50' row='5'}
    <li>
        <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
        <p class="desc">
            <!-- 调用我们自定义的安全截取函数 -->
            [field:description function='my_safe_substr(@me, 100, "...")'/]
        </p>
        <p class="time">
            <!-- 调用我们自定义的相对时间函数 -->
            发布时间:[field:pubdate function='my_time_format(@me)'/]
        </p>
    </li>
{/dede:arclist}

在PHP文件中调用

如果你在自定义的插件、模块或其他PHP文件中需要使用,你需要确保该文件已经包含了 extend.fun.php,织梦的核心文件通常已经包含了它,但如果你自己新建的文件,最好手动包含一下。

<?php
require_once(dirname(__FILE__) . "/include/common.inc.php");
// 如果不确定是否已加载,可以手动包含一次(通常不需要)
// require_once(DEDEINC . "/extend.fun.php");
$article = GetOneArchive($aid); // 假设获取了一篇文章
// 调用我们自定义的相对时间函数
$pretty_time = my_time_format($article['senddate']);
echo "文章的发布时间是:" . $pretty_time;
// 调用我们自定义的截取函数处理摘要
$short_desc = my_safe_substr($article['description'], 80);
echo "" . $short_desc;
?>

注意事项和最佳实践

  1. 文件权限:确保 /include/extend.fun.php 文件具有可写权限(通常是 644),这样你才能通过FTP或在线编辑器修改它。
  2. 命名规范:为你的自定义函数使用独特的、不易冲突的前缀(如 my_, yourname_),这可以防止在织梦未来升级时,官方添加了和你同名的函数,导致你的网站出错。
  3. 代码质量:虽然这是自定义文件,但也要遵循良好的PHP编码规范,添加清晰的注释(如函数说明、参数说明),方便自己日后维护或与他人协作。
  4. 性能考虑:不要在 extend.fun.php 中编写耗时过长的代码(如复杂的循环、文件读写、网络请求等),因为每次页面加载时,这个文件都会被加载,如果必须执行,可以考虑使用缓存机制。
  5. 不要滥用:虽然很方便,但不要把所有逻辑都塞进这个文件,如果一个函数只在某一个特定模块使用,可以考虑将函数定义在该模块的PHP文件内部,以保持代码的模块化。
  6. 备份:在对 extend.fun.php 进行修改前,最好先备份一份原始文件,以防修改出错可以快速恢复。

extend.fun.php 是织梦CMS赋予开发者的一个强大而灵活的扩展点,它完美地解决了“在不破坏核心的前提下进行功能定制”的需求,是每一个织梦开发者都应该熟练掌握的工具,通过合理地使用它,你可以极大地提升开发效率,并构建出功能丰富、个性化的网站。

-- 展开阅读全文 --
头像
C语言全局变量初始化规则是什么?
« 上一篇 2025-12-13
dede模板文件不存在,如何解析文档?
下一篇 » 2025-12-13

相关文章

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

目录[+]