在织梦(DedeCMS)系统中,调用文章摘要是一个常见需求,无论是首页列表、栏目页还是文章页,合理调用摘要都能提升用户体验和SEO效果,本文将详细解析织梦调用文章摘要的多种方法,包括默认调用、自定义调用、高级技巧及常见问题解决,帮助开发者灵活应对不同场景需求。

织梦默认摘要调用方法
织梦系统默认提供了description字段作为文章摘要,在列表页和内容页中可直接通过底层模板变量调用,默认情况下,文章摘要的调用语法为:
- 列表页调用:在
list_article.htm模板文件中,使用[field:description/]即可调用当前文章的摘要,若摘要为空,系统会自动截取文章内容的前200字符作为摘要,可通过修改include/inc_arcpart_view.php文件中的$this->Fields['description'] = $this->SplitFields($this->Fields['description'], $this->Fields['body'], 200);调整截取长度,页调用**:在文章内容页article_article.htm中,可直接使用{dede:field.description/}调用摘要,该值与后台“文章内容”编辑框下方的“字段同步。
注意事项:
- 后台发布文章时,需手动填写摘要字段,否则系统自动截取可能包含无关内容(如代码、广告等)。 中包含HTML标签,需使用
{dede:field.description function='htmlspecialchars(@me)'/}进行转义,避免页面样式错乱。
自定义摘要长度与样式长度可能无法满足所有需求,例如首页列表需要更简短的摘要,而栏目页需要详细描述,此时可通过自定义函数或修改模板实现灵活控制。
通过自定义函数截取摘要
在织梦后台“模板管理”中,可创建自定义函数库(如userfun.php),添加以下代码实现摘要截取:
function my_description($str, $len) {
$str = htmlspecialchars(strip_tags($str));
return mb_substr($str, 0, $len, 'utf-8').'...';
}
在模板中调用时,使用:

{dede:field.description function='my_description(@me, 100)'/}
其中100表示截取100字符,为省略符,可根据需求调整。
使用cn_substr函数按字数截取
织梦内置cn_substr函数支持按中英文字符数截取,语法为:
{dede:field.description function='cn_substr(@me, 80)'/}
此方法适用于需要精确控制字符数的场景,避免英文单词被截断。
添加样式标签需突出显示,可添加CSS类名,
<p class="summary">{dede:field.description function='cn_substr(@me, 80)'/}</p>
在CSS文件中定义:

.summary { color: #666; line-height: 1.6; font-size: 14px; }
高级调用技巧
调用指定栏目的摘要
在首页或栏目页调用特定栏目的文章摘要时,可结合typeid参数使用:
{dede:arclist typeid='1' titlelen='50' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:description function='cn_substr(@me, 60)'/]</p>
</li>
{/dede:arclist}
上述代码调用ID为1的栏目下5篇文章,标题长度50字符,摘要60字符。
调用带图片的摘要需包含首张图片,可修改织梦标签:
{dede:arclist row='3'}
<div class="news-item">
<img src="[field:litpic/]" alt="[field:title/]">
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p>[field:description function='cn_substr(@me, 100)'/]</p>
</div>
{/dede:arclist}
通过[field:litpic/]调用文章首图,搭配摘要实现图文混排。
多条件摘要调用
结合orderby、limit等参数实现复杂调用,例如按发布时间倒序调用最新文章摘要:
{dede:arclist orderby='pubdate' row='8' subday='30'}
<span class="date">[field:pubdate function='MyDate('m-d', @me)'/]</span>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<br>
<small>[field:description function='cn_substr(@me, 50)'/]</small>
{/dede:arclist}
其中subday='30'限制调用近30天内的文章。
常见问题与解决方案
问题1:摘要为空时如何显示默认内容?
解决方法:使用if标签判断摘要是否为空,若为空则调用文章首段或自定义文本:
{dede:field.description runphp='yes'}
if(@me=='') @me = cn_substr(strip_tags(@me), 100);
else @me = cn_substr(@me, 100);
{/dede:field.description}
问题2:摘要中的HTML标签如何去除?
解决方法:通过strip_tags函数过滤标签,
{dede:field.description function='strip_tags(cn_substr(@me, 80))'/}
织梦调用文章摘要的方法灵活多样,从默认调用到自定义函数,再到复杂条件组合,开发者可根据实际需求选择合适方案,关键点在于理解底层模板变量的作用机制,结合PHP函数实现个性化处理,注意摘要内容的规范性和SEO优化,避免因截取不当影响页面效果。
相关问答FAQs
Q1: 为什么织梦调用摘要时显示为空?
A1: 可能原因包括:
- 后台发布文章时未填写摘要字段,且文章内容无有效文本(如纯图片);
- 模板标签书写错误,如
[field:description]误写为[filed:description]; - 自定义函数语法错误导致无法解析,解决方法:检查后台摘要字段是否填写,核对模板标签,并测试自定义函数是否正常执行。
Q2: 如何实现摘要自动去除HTML标签并保留换行?
A2: 可结合strip_tags和nl2br函数实现,
{dede:field.description function='nl2br(strip_tags(cn_substr(@me, 100)))/}
此代码先截取摘要前100字符,去除HTML标签,再将换行符<br>转换为HTML换行标签,确保摘要格式清晰。
