使用 DedeCMS 内置的 cn_substr 函数(最推荐)
这是最标准、最简单的方法,直接在模板文件中调用系统自带的字符串截取函数即可。

(图片来源网络,侵删)
适用场景:
适用于需要截取中文字符串,并且希望按“字”为单位进行截断的场景,一个汉字算一个字符。
操作步骤:
-
打开你的模板文件 找到你需要显示标题的模板文件,
- 首页文章列表:
/templets/default/index_article.htm - 文章列表页:
/templets/default/list_article.htm - 页:
/templets/default/article_article.htm
- 首页文章列表:
-
的调用代码 通常是这样的形式:
<a href='[field:arcurl/]'>[field:title/]</a>
-
修改代码,添加截取和省略号 将
[field:title/]替换为cn_substr函数调用。
(图片来源网络,侵删)语法:
{dede:field function='cn_substr(@me, 截取长度, 省略符)'/}@me:代表当前字段的值,在这里就是[field:title]的内容。截取长度:你希望显示的字符数量,建议设置为20到40之间,根据你的版面布局调整。省略符被截断后,末尾显示的字符,通常是 。
示例: 假设你想将标题限制在 20个字符 长度,并在末尾添加 ,修改后的代码如下:
<a href='[field:arcurl/]'>{dede:field function='cn_substr(@me, 20, "...")'/}</a>效果:
- 是 "DedeCMS 是一个非常强大的内容管理系统",显示为 "DedeCMS 是一个非常强..."。
- 是 "你好世界",长度不足20,则完整显示 "你好世界"。
使用 substitute 函数(正则表达式替换)
如果你对 cn_substr 的截断方式不满意,或者有更复杂的需求(比如只在特定位置添加省略号),可以使用 substitute 函数,它基于正则表达式,更灵活。

(图片来源网络,侵删)
适用场景:
适用于需要更精确控制截断逻辑的场景,例如只在标题超过一定长度时才添加省略号。
操作步骤:
-
打开模板文件(同上)。
-
使用
substitute函数修改标题代码。语法:
{dede:field name='title' function='str_replace("被替换的内容", "替换成的内容", @me)'/}我们可以利用正则表达式来实现截断和添加省略号。
示例: 这个例子实现的功能和
cn_substr类似,但展示了正则的用法。<a href='[field:arcurl/]'>{dede:field name='title' function='preg_replace("/^(.{20}).*$/", "\\1...", @me)'/}</a>代码解释:
preg_replace:PHP 的正则表达式替换函数。"/^(.{20}).*$/":这是正则表达式模式。^:匹配字符串的开头。(.{20}):匹配任意20个字符(包括汉字),并捕获为一个分组。- 匹配任意数量的任意字符(0个或多个)。
- 匹配字符串的结尾。
- 整个模式的意思是:从开头匹配任意20个字符,后面还有任意内容。
"\\1...":这是替换字符串。\\1:代表第一个捕获组的内容(也就是那20个字符)。- 在后面添加省略号。
@me:原始的标题内容。
效果:
- "这是一个很长的标题,需要被截断" -> "这是一个很长的标题,..."
- " -> "短标题" (因为不匹配正则模式,所以不会被替换)
修改 PHP 源文件(不推荐,仅作了解)
这种方法是直接修改 DedeCMS 的核心文件,虽然可以实现,但强烈不推荐,因为:
- 升级 DedeCMS 时,你的修改会被覆盖,需要重新修改。
- 可能影响其他依赖此函数的模块。
- 容易引入不稳定性。
操作步骤(仅作了解):
- 找到文件:
/include/helpers/extend.helper.php - 在文件末尾,
?>之前,添加你自定义的函数,if ( ! function_exists('my_title_cut')) { function my_title_cut($title, $len = 40, $dot = '...') { if (strlen($title) > $len) { return mb_substr($title, 0, $len, 'UTF-8') . $dot; } else { return $title; } } } - 在模板中调用这个新函数:
<a href='[field:arcurl/]'>{dede:field function='my_title_cut(@me, 20, "...")'/}</a>
总结与最佳实践
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
cn_substr 函数 |
简单、标准、稳定,专为中文优化,按“字”截断,符合中文排版习惯。 | 功能相对固定。 | ⭐⭐⭐⭐⭐ (强烈推荐) |
substitute 函数 |
非常灵活,可以实现复杂的正则匹配和替换。 | 语法稍复杂,需要了解正则表达式。 | ⭐⭐⭐⭐ (适用于特殊需求) |
| 修改 PHP 源文件 | 可以实现任何想要的功能。 | 破坏性大,升级麻烦,有风险。 | ⭐ (不推荐,除非万不得已) |
给你的建议:
直接使用 方法一,在你的模板文件中找到 [field:title/] 并将其替换为:
{dede:field function='cn_substr(@me, 30, "...")'/}
把 30 调整成一个适合你网站布局的数值即可,这是最安全、最标准的做法。
