使用 infolen 属性(最简单,推荐)
这是DedeCMS内置的一个最直接、最简单的方法,专门用于截取文章摘要(内容)的长度。

(图片来源网络,侵删)
标签语法:
{dede:arclist typeid='分类ID' row='10' titlelen='50' infolen='200' }
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:info/]</p>
</li>
{/dede:arclist}
参数解释:
typeid='分类ID':指定要调用哪个分类下的文章。typeid='5',如果要调用多个分类,用英文逗号隔开,如typeid='5,6,7'。row='10':调用文章的数量,len='50'`:标题显示的字数长度(可选)。infolen='200':【核心参数】 这是限制文章内容字数的关键,它会截取文章正文的前200个字符作为摘要显示出来。
优点:
- 简单、高效,是DedeCMS官方推荐的方式。
- 不会修改数据库,只是在前端显示时进行截取。
缺点:

(图片来源网络,侵删)
- 它截取的是从文章开头算起的固定字符数,可能会在单词或句子中间断开,影响阅读体验。
- 它调用的是文章正文的摘要,而不是
description字段。
使用 description 字段(更推荐,效果更好)
这种方法是调用文章在后台“文档详细内容”页面中填写的 “ 或 “描述” 字段,这样能保证截取的是一段完整的、有意义的文字,并且在任何地方断句都比直接截取正文要好。
步骤1:在后台文章编辑页填写摘要 登录DedeCMS后台,编辑你要显示的文章,在“文档详细内容”页面的最下方,找到 “ 或 简介” 输入框,手动填写一段文章的简介(例如200字以内)。
步骤2:在模板中调用 description 字段
在模板文件中,使用 {dede:arclist} 调用 description 字段。
{dede:arclist typeid='分类ID' row='10' titlelen='50'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:description function='cn_substr(@me, 200)'/]</p>
</li>
{/dede:arclist}
核心技巧:
这里我们使用了 function='cn_substr(@me, 200)'。

(图片来源网络,侵删)
@me:代表当前这个字段(在这里就是description)的原始值。cn_substr():这是DedeCMS的一个PHP函数,用于截取字符串。200:表示截取200个字符。
优点:是编辑精心撰写的摘要,质量高,可读性好。
- 截断点由编辑控制,更符合SEO和用户体验。
缺点:
- 需要手动为每篇文章填写摘要,比较耗时。
使用自定义函数(高级,自动截取)
如果你不想手动填写摘要,又希望 infolen 的截断效果更“人性化”(比如在句号、逗号处断开),可以编写一个自定义函数。
步骤1:创建自定义函数文件
在您的网站根目录下找到 include/helpers/extend.helper.php 文件,在文件末尾的 ?> 之前添加如下PHP函数代码:
/**
* 智能截取摘要,尽量在句号、空格处断开
*
* @param string $str 需要截取的字符串
* @param int $length 截取长度
* @param string $dot 超过长度的附加字符
* @return string
*/
function smart_cutstr($str, $length, $dot = '...')
{
$str = strip_tags(trim($str)); // 去除HTML标签和首尾空格
$str = str_replace(array("\n", "\r", "\t"), '', $str); // 去换行和制表符
// 如果字符串长度小于等于指定长度,直接返回
if (mb_strlen($str, 'UTF-8') <= $length) {
return $str;
}
// 截取到指定长度的子串
$substr = mb_substr($str, 0, $length, 'UTF-8');
// 尝试在最后一个句号、逗号或空格处断开
$last_dot = mb_strrpos($substr, '。', 0, 'UTF-8');
$last_comma = mb_strrpos($substr, ',', 0, 'UTF-8');
$last_space = mb_strrpos($substr, ' ', 0, 'UTF-8');
// 找到最靠近末尾的断点
$last_break = max($last_dot, $last_comma, $last_space);
if ($last_break > 0) {
return mb_substr($substr, 0, $last_break + 1, 'UTF-8') . $dot;
} else {
// 如果没有找到合适的断点,直接截断
return $substr . $dot;
}
}
步骤2:在模板中调用自定义函数 现在你可以在模板中像这样使用它:
{dede:arclist typeid='分类ID' row='10' titlelen='50'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:info function='smart_cutstr(@me, 200)'/]</p>
</li>
{/dede:arclist}
参数解释:
[field:info function='smart_cutstr(@me, 200)'/]:这里调用了我们刚刚创建的smart_cutstr函数。@me:传递field:info(文章正文)的原始内容给函数。200:设置截取长度为200个字符。
优点:
- 自动处理,无需手动填写摘要。
- 截断效果比
infolen更智能,可读性更好。
缺点:
- 需要修改核心文件(extend.helper.php),升级DedeCMS时可能会被覆盖,需要重新添加。
- 对于包含大量无意义符号的文章,效果可能不完美。
总结与推荐
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
infolen |
最简单,官方支持 | 可能截断不自然,调用正文摘要 | 快速搭建,对内容质量要求不高的列表 |
description |
内容质量最高,可读性好 | 需要手动为每篇文章填写摘要 | 新闻门户、博客等对内容展示要求高的网站 |
| 自定义函数 | 自动处理,截断智能 | 需修改核心文件,有维护成本 | 长期运营、追求自动化和良好用户体验的网站 |
给您的建议:
- 如果只是临时做一个简单的列表,直接使用方法一 (
infolen) 就足够了。 - 如果您的网站是正式运营,希望内容展示更专业、更利于SEO和用户体验,强烈推荐使用方法二 (
description),养成在后台填写摘要的好习惯。 - 如果您有大量的历史文章没有填写摘要,且希望系统自动处理,可以考虑使用方法三(自定义函数)作为折中方案。
