使用 infolen 属性(最常用、最简单)
这是DedeCMS内置的、最直接的方法,它通过截取标题的字符数来生成缩略标题。

(图片来源网络,侵删)
标签语法:
{dede:arclist row='10' titlelen='20'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title function='cn_substr(@me, 20)'/]</a>
</li>
{/dede:arclist}
参数说明:
row='10':表示调用10条文章,len='20'这个参数在这里**无效**,它只对{dede:field.title/}这样的标签起作用,我们需要在function` 中指定截取长度。[field:title function='cn_substr(@me, 20)'/]:这是核心部分。field:title:获取文章的完整标题。function='...':对获取到的值进行函数处理。cn_substr(@me, 20):这是DedeCMS的截取字符串函数。@me:代表当前字段的值,即[field:title]的内容。20:表示截取前20个字符(一个汉字、一个字母或一个符号都算一个字符)。
优点:
- 简单直接,一行代码搞定。
- 无需修改任何文件,纯模板标签实现。
缺点:

(图片来源网络,侵删)
- 按字符截取,可能会截断词语,导致语义不完整,例如标题为“织梦CMS建站教程大全”,截取15个字符会变成“织梦CMS建站教程大”,看起来有点奇怪。
- 无法区分中英文是 "DedeCMS is a good CMS!",截取10个字符会变成 "DedeCMS is ",可能把单词截断。
使用 mb_substr 函数(推荐,更智能)
为了解决 cn_substr 可能截断词语的问题,我们可以使用 PHP 的 mb_substr 函数,它能更好地处理中文字符,并且可以按字数(一个汉字算一个字,一个单词也算一个字)来截断。
标签语法:
{dede:arclist row='10'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title function='mb_substr(@me, 0, 20, "utf-8")'/]</a>
</li>
{/dede:arclist}
参数说明:
[field:title function='mb_substr(@me, 0, 20, "utf-8")'/]:mb_substr:多字节字符串截取函数。@me。0:开始截取的位置(0表示从开头)。20:截取的字数。"utf-8":网站编码,非常重要! 如果你的网站是gbk编码,这里就要写成"gbk"。
优点:

(图片来源网络,侵删)
- 按字数截取,对中文更友好,不会轻易把一个词分开。
- 语义更完整,显示效果更好。
缺点:
- 需要确保你的网站编码和函数中的编码参数一致。
使用自定义函数(最灵活、最强大)
如果你的需求更复杂,比如希望“**如果标题超过指定长度,就显示省略号 ,否则显示完整标题”,那么自定义函数是最佳选择。
操作步骤:
-
创建自定义函数文件 在你的网站根目录下的
include/extend.func.php文件中(如果这个文件不存在,就新建一个),添加以下 PHP 函数:/** * 智能截取标题,并添加省略号 * @param string $title 原始标题 * @param int $length 截取长度 * @return string 处理后的标题 */ function smart_title($title, $length = 20) { // 如果标题长度小于等于指定长度,直接返回 if (mb_strlen($title, 'utf-8') <= $length) { return $title; } // 否则截取并添加省略号 return mb_substr($title, 0, $length, 'utf-8') . '...'; }注意:
- 函数名
smart_title可以自定义。 mb_strlen用来获取标题的真实长度。utf-8同样需要根据你的网站编码修改。
- 函数名
-
在模板中调用自定义函数 现在你可以像使用普通函数一样在你的模板中调用它了。
{dede:arclist row='10'} <li> <a href="[field:arcurl/]" title="[field:title/]">[field:title function='smart_title(@me, 20)'/]</a> </li> {/dede:arclist}参数说明:
smart_title(@me, 20):调用我们刚刚创建的smart_title函数。@me:将[field:title]的值传递给函数的第一个参数。20:将20这个值传递给函数的第二个参数$length。
优点:
- 逻辑最灵活,可以实现各种复杂需求(如添加省略号、自定义后缀等)。
- 代码复用性强,在网站的任何地方都可以调用这个函数。
- 显示效果最专业、最友好。
缺点:
- 需要修改PHP文件,对新手来说稍微复杂一点。
总结与对比
| 方法 | 标签示例 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
cn_substr |
[field:title function='cn_substr(@me, 20)'/] |
极其简单,无需额外操作 | 可能截断词语,中英文混合效果差 | 快速实现,对标题美观度要求不高的地方 |
mb_substr |
[field:title function='mb_substr(@me, 0, 20, "utf-8")'/] |
按字数截取,中文友好,不轻易断词 | 不带省略号,需确保编码正确 | 大多数列表页,追求基本的美观和完整性 |
| 自定义函数 | [field:title function='smart_title(@me, 20)'/] |
最灵活,可添加省略号,效果最佳 | 需要修改PHP文件,有入门门槛 | 对显示效果有高要求的网站,推荐使用 |
强烈推荐使用方法三(自定义函数),因为它能提供最佳的用户体验,是专业开发中常用的做法,如果你只是想快速搞定,方法二 (mb_substr) 也是一个非常好的选择。
