下面我将从几个方面详细解释如何实现和修改列表页描述的字数限制。

修改自动截取描述的长度
当文章的description字段为空时,织梦会使用函数cn_substr_utf8($row['body'], 200)来从正文中截取前200个字符作为描述,这里的 200 就是字数限制。
修改方法:
-
找到核心文件: 这个逻辑通常在织梦的核心文件中,最常见的是在
/include/arc.listview.class.php文件里,这个文件是处理列表页数据生成的主要类。 -
定位并修改代码: 打开
/include/arc.listview.class.php文件,使用编辑器的查找功能(通常是Ctrl+F)搜索cn_substr_utf8($row['body']。
(图片来源网络,侵删)你可能会找到类似下面这样的代码:
// ... 其他代码 ... if (empty($row['description'])) { $row['description'] = cn_substr_utf8($row['body'], 200); } // ... 其他代码 ...这里的
200就是自动截取的字符数,你可以将它修改为你想要的任何数字,150、300等。 -
保存文件并更新缓存: 修改完成后,保存文件,登录你的织梦后台,进入“系统” -> “一键更新网站” -> “更新所有” 或 “更新栏目HTML” 和 “更新文档HTML”,让织梦重新生成列表页,使修改生效。
手动设置 description 字段的显示长度
如果你已经为每篇文章都填写了 description 字段,但希望在列表页显示时进行截断(限制在100个字符),你需要在列表页的模板文件中进行修改。

修改方法:
-
找到列表页模板文件: 登录织梦后台,进入“模板” -> “默认模板管理”,找到你当前使用的栏目,点击其“列表模板”对应的“修改”链接。
列表页模板文件是
/templets/default/list_栏目ID.htm或者/templets/default/list.htm。 -
修改模板代码: 在模板文件中,找到调用文章描述的标签,通常是
{dede:field.description/}或{dede:list}循环体内的[field:description/]。原始代码可能是这样的:
<div class="intro"> {dede:field.description/} </div>修改为使用
cn_substr函数进行截断:<div class="intro"> [field:description function='cn_substr_utf8(@me, 100)'/] </div>或者,如果你使用的是
{dede:list}{dede:list pagesize='10'} <div class="intro"> [field:description function='cn_substr_utf8(@me, 100)'/] </div> {/dede:list}代码解释:
[field:description]: 这是调用文章描述字段的标签。function='...': 这是为标签值附加一个函数。cn_substr_utf8(@me, 100): 这是织梦的字符截断函数。@me: 代表当前标签的原始值,也就是完整的description100: 你希望截取的字符长度。
-
保存模板并更新: 保存修改后的模板文件,同样,去“一键更新网站”中更新对应的列表页即可。
更灵活的方案(根据内容是否包含“阅读更多”来决定)
这是一个非常实用且人性化的技巧,如果你在文章正文中使用了“阅读更多”分隔符(<hr class="more" />),你可以让列表页的描述只显示“更多”之前的内容,而不是强制截取。
修改方法:
在列表页模板中,使用下面的代码替换掉原来的 {dede:field.description/}:
<div class="intro">
{dede:field.description runphp='yes'}
if (strpos(@me, '<hr class="more" />') !== false) {
@me = explode('<hr class="more" />', @me);
@me = @me[0];
} else {
@me = cn_substr_utf8(@me, 150); // 如果没有分隔符,则截取前150个字符
}
{/dede:field.description}
</div>
代码解释:
runphp='yes': 允许在模板标签内执行PHP代码。strpos(@me, '<hr class="more" />'): 检查描述内容中是否包含“阅读更多”的分隔符。- 如果包含,就用
explode()函数将内容按分隔符拆分成数组,并取数组的第一部分(@me[0]),也就是“更多”之前的内容。 - 如果不包含,则使用
cn_substr_utf8()函数截取前150个字符作为后备方案。
注意: 这个方法要求你在发布文章时,确实在正文中使用了 <hr class="more" /> 这个分隔符。
| 需求场景 | 修改位置 | 核心方法 |
|---|---|---|
修改自动截取长度(description为空时) |
/include/arc.listview.class.php |
搜索并修改 cn_substr_utf8($row['body'], 200) 中的 200。 |
手动截取description长度(description时) |
列表页模板文件 (list_*.htm) |
使用 [field:description function='cn_substr_utf8(@me, N)'/]。 |
| 智能截取(基于“阅读更多”) | 列表页模板文件 (list_*.htm) |
使用 runphp='yes' 和 strpos() 函数进行判断和拆分。 |
重要提示:
无论你修改了哪个文件,最后都必须去后台“一键更新网站”重新生成HTML页面,否则修改不会生效,在修改核心文件(如 arc.listview.class.php)前,建议先备份一份,以防出错。
