- 它是什么? - 文件的基本定义和作用。
- 它有什么用? - 核心功能和重要性。
- 如何使用它? - 详细的代码示例和最佳实践。
- 注意事项和最佳实践。
它是什么?
extend.fun.php 是织梦CMS系统预留的一个自定义函数扩展文件。

- 位置:通常位于
/include/目录下。 - 性质:它是一个普通的PHP文件,专门用来存放用户自己编写的函数。
- 核心思想:为了在不修改织梦核心程序文件(如
/include/helpers/下的archive.helper.php,string.helper.php等)的前提下,扩展织梦的功能,这遵循了“程序与数据分离”以及“二次开发不修改核心”的原则,使得织梦系统升级时,你的自定义功能不会丢失。
它就是你的“私人工具箱”,你可以把织梦没有提供的、但你在开发模板或功能时需要反复使用的函数,都放到这个文件里。
它有什么用?(核心功能)
extend.fun.php 的核心作用是封装和复用自定义功能,当你发现织梦自带的函数(调用方式如 GetDateTime())无法满足你的需求时,就可以在这里创建你自己的函数。
常见的应用场景包括:
- 数据处理:对字段内容进行特殊格式化,截取特定长度的文本并添加省略号、过滤HTML标签、将数字转换成中文大写等。
- 复杂逻辑:根据多个条件判断并返回不同的结果,根据会员等级显示不同的价格或标签。
- API调用:调用外部接口获取数据(如天气、汇率),并返回给模板。
- 生成特定内容:生成随机码、唯一ID、特定格式的日期或链接等。
- 辅助功能:调试函数(如打印变量)、权限检查函数等。
如何使用它?(代码示例)
使用 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:一个根据时间显示“刚刚”、“几分钟前”的函数

这个函数在列表页显示文章发布时间时非常实用。
<?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; ?>
注意事项和最佳实践
- 文件权限:确保
/include/extend.fun.php文件具有可写权限(通常是644),这样你才能通过FTP或在线编辑器修改它。 - 命名规范:为你的自定义函数使用独特的、不易冲突的前缀(如
my_,yourname_),这可以防止在织梦未来升级时,官方添加了和你同名的函数,导致你的网站出错。 - 代码质量:虽然这是自定义文件,但也要遵循良好的PHP编码规范,添加清晰的注释(如函数说明、参数说明),方便自己日后维护或与他人协作。
- 性能考虑:不要在
extend.fun.php中编写耗时过长的代码(如复杂的循环、文件读写、网络请求等),因为每次页面加载时,这个文件都会被加载,如果必须执行,可以考虑使用缓存机制。 - 不要滥用:虽然很方便,但不要把所有逻辑都塞进这个文件,如果一个函数只在某一个特定模块使用,可以考虑将函数定义在该模块的PHP文件内部,以保持代码的模块化。
- 备份:在对
extend.fun.php进行修改前,最好先备份一份原始文件,以防修改出错可以快速恢复。
extend.fun.php 是织梦CMS赋予开发者的一个强大而灵活的扩展点,它完美地解决了“在不破坏核心的前提下进行功能定制”的需求,是每一个织梦开发者都应该熟练掌握的工具,通过合理地使用它,你可以极大地提升开发效率,并构建出功能丰富、个性化的网站。
