在 DedeCMS 中,文章摘要的长度通常不是直接在一个全局设置里定义的,而是通过调用标签的参数来控制的,也就是说,你在哪个地方(首页、列表页、内容页)调用摘要,就在那个标签里指定长度。
下面我将分三种情况,从最常用到最特殊,为你详细说明如何设置摘要长度。
在列表页或首页调用文章摘要(最常用)
这是最常见的需求,比如在首页的“最新文章”或“热门文章”模块,以及列表页中,每篇文章旁边都显示一段摘要。
核心标签: {dede:arclist}
关键属性: description
{dede:arclist} 标签有一个 description 属性,用于控制摘要的长度,它有两种取值方式:
description='len':显示由len指定的固定长度的字符数。description='all': 显示文章在后台设置的“字段中的全部内容。
示例:
场景: 在首页调用最新10篇文章,并显示摘要,摘要长度限制为100个汉字。
{dede:arclist titlelen='32' row='10' description='100'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:description/]...</p>
</li>
{/dede:arclist}
代码解析: len='32'`:标题长度限制为32个字节(一个汉字算2个字节,一个英文算1个字节)。
row='10':调用10篇文章。description='100':这是关键,它告诉系统从文章正文中截取前100个字符作为摘要,这里的100指的是字符数,不是汉字数。[field:description/]:调用摘要内容。- 在摘要末尾加上省略号,是常见的做法。
页调用摘要
页(article_article.htm),你可能想在文章标题下方显示一段固定的摘要。
核心标签: {dede:field name='description'}
这个标签直接调用文章在后台编辑时填写的“字段,它的长度取决于你在后台填写了多少内容。
如何控制长度?
这里同样需要一个技巧,因为 field:description 本身不带长度参数,我们需要结合PHP的 substr 函数来截取。
示例:
场景: 在文章内容页,显示从后台摘要字段中截取的前80个字符。
<div class="summary">
<strong></strong>
{dede:field name='description' function='substr(@me,0,80)'/}...
</div>
代码解析:
{dede:field name='description'}:获取后台的摘要内容。function='substr(@me,0,80)':这是一个功能强大的用法。@me:代表当前字段的值,也就是field:description的内容。substr():是PHP的字符串截取函数。substr(@me, 0, 80):表示从@me的第0个位置开始,截取80个字符。
- 同样,在末尾手动添加省略号。
从文章正文中自动提取摘要(高级用法)
你可能希望摘要不是手动填写的,也不是从正文中简单截取,而是更智能地提取,比如提取正文的前200个字符,并且去除HTML标签。
核心标签: {dede:field name='body'}
实现方法:
通过 function 属性结合PHP函数来实现。
示例:
场景: 在列表页调用摘要,但摘要不是来自 description 字段,而是来自文章正文 body,并截取前150个非HTML标签的字符。
{dede:arclist row='5'}
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<div class="abstract">
[field:body function='strip_tags(@me)'/]...
</div>
<a href="[field:arcurl/]">阅读全文</a>
{/dede:arclist}
代码解析:
[field:body function='strip_tags(@me)'/]:field:body:获取文章的正文内容。strip_tags(@me):strip_tags()是PHP的内置函数,作用是去除字符串中的所有HTML和PHP标签。@me同样代表当前字段的值(即文章正文)。- 这个组合的效果是:先获取正文,然后去掉所有标签(
<p>、<img>等),只留下纯文本内容,DedeCMS的默认行为会截取一部分(通常是120个字符)来显示。
如果你想精确控制从正文中提取的长度,可以这样做:
[field:body function='cn_substr(strip_tags(@me), 200)'/]...
代码解析:
cn_substr():这是 DedeCMS 自定义的一个非常实用的函数。- 它可以正确处理中英文混合的字符串截断,一个汉字算一个字符,一个英文也算一个字符,不会出现半个汉字乱码的问题。
cn_substr(字符串, 长度)
strip_tags(@me):先去除HTML标签。cn_substr(strip_tags(@me), 200):然后对纯文本内容截取前200个字符。
总结与最佳实践
| 需求场景 | 推荐标签 | 关键属性/方法 | 说明 |
|---|---|---|---|
| 列表页/首页调用摘要 | {dede:arclist} |
description='100' |
从文章正文中截取指定字符数作为摘要,最常用。 |
给你的建议:
- 养成好习惯: 在后台发布文章时,务必手动填写“,这样做的好处是,摘要内容可以由你精心编辑,更准确地概括文章,有利于SEO和用户体验。
- 统一调用方式: 尽量在你的网站中统一摘要的调用方式,约定所有列表页都使用
{dede:arclist description='150'}来调用150字符的摘要。 - 使用
cn_substr: 如果需要从正文提取,优先使用cn_substr函数,它能更好地处理中文,避免乱码问题。
希望这份详细的解释能帮助你完全掌握 DedeCMS 文章摘要长度的设置!
