- 旧版 DedeCMS (5.x - 5.7): 主要存放在
/include/helpers/目录下。 - 新版 DedeCMS (5.7 之后,如 5.8, V57-V574, V57-V574-GBK): 主要存放在
/include/目录下。
旧版 DedeCMS (DedeCMS 5.7)
在旧版本中,自定义宏标记通常以 helper_php.php 文件的形式存在,并且根据功能分类存放在不同的子文件夹中。

(图片来源网络,侵删)
主要存放位置:
/include/helpers/ 目录
这个目录下会有多个 helper_php.php 文件,每个文件负责一类宏标记:
archive.helper.php: 用于与文章、栏目相关的宏标记。channel.helper.php: 用于与频道、栏目相关的宏标记。extend.helper.php: 这是最常用的一个文件,用于存放你自定义的全局宏标记,如果你要添加一个新的宏标记,最安全、最推荐的方式就是修改这个文件。float.helper.php: 用于浮动窗口相关的宏标记。partview.class.php: 用于自定义页面模板({dede:include file='...' /})的核心类。sysinfolib.helper.php: 用于系统信息相关的宏标记。
如何添加自定义宏标记(以旧版为例):
-
打开文件:使用 FTP 或文件管理器,登录你的网站服务器,打开
/include/helpers/extend.helper.php文件。 -
添加函数:在文件末尾的
?>之前,添加你的自定义 PHP 函数,函数名必须以lib_开头。
(图片来源网络,侵删) -
函数示例:
// 这是一个自定义宏标记,用于显示 "Hello, [用户名]!" function lib_hello($aid, $name = '') { // $aid 和 $name 是你在调用宏标记时传入的参数,如 {dede:lib_hello('123', '织梦') /} // 即使不传参数,DedeCMS 也会默认传入一些值,$aid 通常为文章ID。 if (empty($name)) { $name = "访客"; } $str = "Hello, " . $name . "!"; return $str; } -
使用宏标记: 在任何模板文件(.htm)中,你都可以这样调用它:
{dede:lib_hello('123', '织梦爱好者')}
新版 DedeCMS (DedeCMS 5.8, V57-V574-GBK)
在新版本中,DedeCMS 对代码结构进行了一些优化,虽然旧的 helpers 目录依然存在,但新增的、更核心的宏标记功能被整合到了 /include/ 目录下的 inc_archives_func.php 和 inc_channel_unit_functions.php 文件中。
主要存放位置:
/include/inc_archives_func.php: 这是新版中最重要的文件之一,包含了与文章列表、内容页相关的核心函数,也包括了扩展宏标记的注册和定义,如果你想在文章列表页或内容页使用新的宏标记,这里是你需要关注的重点。/include/inc_channel_unit_functions.php: 主要用于与频道、栏目相关的函数和宏标记。/include/helpers/extend.helper.php: 依然有效! 这个文件仍然可以用来添加全局通用的自定义宏标记,并且是很多开发者习惯使用的地方。
如何添加自定义宏标记(以新版为例):
方法与旧版类似,但更推荐使用新版的核心文件。

(图片来源网络,侵删)
-
打开文件:推荐打开
/include/inc_archives_func.php文件。 -
添加函数:在文件末尾添加你的自定义函数,同样以
lib_开头。 -
函数示例:
// 这是一个自定义宏标记,用于格式化文章发布时间 function lib_format_time($aid, $format = 'Y-m-d') { // $aid 是文章ID // $format 是传入的时间格式,如 {dede:lib_format_time('123', 'Y年m月d日') /} // 获取文章的发布时间 $arcRow = $GLOBALS['dsql']->GetOne("SELECT pubdate FROM `#@__archives` WHERE id = '$aid'"); if ($arcRow) { $timestamp = $arcRow['pubdate']; return MyDate($format, $timestamp); } return "未知时间"; } -
使用宏标记: 在文章列表页或内容页模板中调用:
文章ID为123的发布时间是:{dede:lib_format_time('123', 'Y年m月d日 H时i分')}
如何确认你的 DedeCMS 版本?
如果你不确定自己的版本,可以:
- 查看网站后台:登录 DedeCMS 后台,在页面底部通常会有版本号信息。
- 查看核心文件:打开网站根目录下的
dede/文件夹,找到config.php或index.php,里面通常会定义版本号,define('DEDEINC', dirname(__FILE__));附近可能会有注释。 - 查看文件列表:直接检查
/include/目录下是否存在inc_archives_func.php文件,如果存在,基本可以判定是 5.7 之后的版本。
重要注意事项
- 修改前备份:在修改任何核心文件(如
extend.helper.php或inc_archives_func.php)之前,务必备份原文件!一旦修改出错,可能导致网站无法正常显示。 - 函数名规范:自定义宏标记的函数名必须以
lib_开头,否则 DedeCMS 无法识别和调用。 - 参数处理:函数的第一个参数
$aid通常由系统自动传入(文章ID),后面的参数是你自己定义的,在函数内部要对传入的参数进行判断,避免出错。 - 缓存问题:添加或修改宏标记后,如果前台页面没有立即生效,请清除网站缓存(后台 -> 系统 -> 清除缓存)。
希望这个详细的解答能帮助你找到正确的文件位置!
