使用系统默认摘要字段(最常用、最推荐)
这是最标准、最简单的方法,织梦在后台发布文章时,有一个专门的“输入框,我们只需要调用这个字段即可。

(图片来源网络,侵删)
标签语法:
[field:description/]
参数说明:
这个标签可以附加一些参数来控制摘要的显示效果。
-
length='数字': 设置摘要显示的字数(按字节计算,一个汉字算2个字节,一个字母算1个字节)。[field:description function='cn_substr(@me, 100)'/]这里的100是字节长度。- 更简单的方式是使用
length:[field:description length='100'/](注意:新版本织梦推荐使用function或length,具体取决于模板引擎版本,但length更直观)。
-
function='htmlspecialchars': 对摘要中的HTML特殊字符(如<,>,&)进行转义,防止破坏页面结构。强烈建议加上。 -
ellipsis='...': 在摘要被截断后,在末尾添加省略号。
(图片来源网络,侵删)
综合应用示例:
假设我们要在文章列表中调用摘要,限制在100个字节,并转义HTML字符,末尾加省略号。
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a> <p>[field:description function='htmlspecialchars(cn_substr(@me, 100))' ellipsis='...'/]</p>
代码解析:
[field:arcurl/]: 获取文章链接。[field:title/]: 获取文章标题。[field:description ...]: 调用摘要。@me: 代表当前字段的原始值,即description字段的内容。cn_substr(@me, 100): 截取@me的前100个字节。htmlspecialchars(...): 对截取后的结果进行HTML转义。ellipsis='...'': 如果内容被截断,则在末尾添加 。
自动截取文章内容(无摘要时使用)
编辑人员可能忘记填写摘要字段,为了保证列表页内容不会为空,我们可以使用一个备用方案:自动从文章正文中截取一段文字作为摘要。
标签语法:
[field:body function='cn_substr(@me, 200)'/]
注意:
body是文章正文的字段名。- 这种方法会截取文章正文的前200个字节,但可能会包含一些无用的HTML标签(如
<p>,<img>),导致显示不美观。
优化方案:过滤HTML标签后再截取
我们可以使用 htmlspecialchars 和 ereg_replace (或 preg_replace) 组合,先去掉HTML标签,再进行截取和转义。
[field:body function='htmlspecialchars(cn_substr(ereg_replace("(<[^>]*>)", "", @me), 200))'/]
代码解析:
ereg_replace("(<[^>]*>)", "", @me): 使用正则表达式(<[^>]*>)匹配并移除所有HTML标签。cn_substr(..., 200): 对纯文本内容进行截取。htmlspecialchars(...): 对最终结果进行转义。
使用自定义字段(灵活扩展)
字段不够用,或者你想为不同栏目设置不同格式的摘要,可以创建自定义字段。
-
后台设置:
- 进入“核心” -> “频道模型” -> “内容模型管理”。
- 选择你正在使用的模型(如“文章”模型),点击“更改”。
- 在“字段管理”中,点击“添加新字段”。
- 字段名建议用英文,如
custom_summary。 - 字段类型选择“文本区域”或“多行文本”。
- 提交后,在发布文章的页面就会出现你新添加的字段。
-
模板调用: 调用方式和默认摘要字段完全一样,只是把
description换成你的自定义字段名。
[field:custom_summary/]
同样可以加上参数:
[field:custom_summary length='150' function='htmlspecialchars'/]
完整的列表页调用示例
下面是一个典型的文章列表页(list_article.htm)的循环代码,综合运用了上述方法。
{dede:list pagesize='10'}
<li>
<!-- 文章标题和链接 -->
<h2><a href="[field:arcurl/]" title="[field:title function='htmlspecialchars(@me)']">[field:title/]</a></h2>
<!-- 优先调用系统摘要,如果没有则自动截取正文 -->
<p>
<!-- 先尝试调用系统摘要,并截取100字节 -->
[field:description function='cn_substr(htmlspecialchars(@me), 100)' ellipsis='...'/]
<!-- 如果系统摘要为空,则自动截取正文200字节作为备用 -->
<span class="auto-summary" style="display:none;">[field:body function='cn_substr(ereg_replace("(<[^>]*>)", "", @me), 200)'/]</span>
</p>
<!-- 文章其他信息 -->
<div class="info">
发布时间:[field:pubdate function='MyDate('Y-m-d', @me)']
作者:[field:writer/]
浏览:[field:click/]
</div>
</li>
{/dede:list}
注意: 上面代码中 auto-summary 的部分只是一个示例,织梦的列表标签在循环时,description 为空,它本身不会自动去调用 body,在实际开发中,更常见的做法是:
- 严格要求编辑填写摘要,并作为网站规范。
- 如果一定要实现“自动截取”作为备用,可能需要修改织梦的核心文件或在模板中使用更复杂的PHP逻辑,但这会增加维护难度,对于大多数网站,使用方法一就足够了。
| 方法 | 优点 | 缺点 | 适用场景 | |
|---|---|---|---|---|
| 默认摘要 | [field:description/] |
标准、高效、可控 | 依赖编辑人员手动填写 | 所有列表页、频道页的首选 |
| 自动截取 | [field:body function='...'/] |
作为备用方案,避免摘要为空 | 可能包含HTML标签,显示不美观 | 当无法保证摘要一定填写时使用 |
| 自定义摘要 | [field:自定义字段名/] |
灵活,可满足特殊需求 | 需要后台配置,增加复杂度 | 不同栏目需要不同摘要格式时 |
对于99%的情况,请直接使用 方法一,并配合 length 和 function 参数进行优化,这是最符合织梦设计理念且最稳定可靠的方式。
