自动摘要概述
织梦CMS的自动摘要功能可以在发布文章时自动从正文中提取摘要(description字段),减少编辑手动填写摘要的工作量。通过配置截取规则和使用模板函数,可以灵活控制自动摘要的生成方式。
一、开启自动摘要功能
系统层面的自动摘要设置:
- 进入
系统 > 系统基本参数 - 在"核心设置"中找到摘要相关设置:
自动生成摘要: 是 摘要最大长度: 250(字符数) 是否去除HTML标签: 是 是否保留换行符: 否
二、自动摘要的生成逻辑
织梦在发布文章时的摘要处理流程:
1. 检查description字段是否为空 2. 如为空且有正文内容: a. 从body字段中提取纯文本 b. 按设置的"摘要最大长度"截取 c. 去除HTML标签 d. 保存到description字段 3. 如description非空:保留手动填写的摘要
三、修改自动摘要的截取规则
修改 dede/article_add.php 中的摘要生成逻辑:
<?php
// 自定义摘要生成函数
function autoDescription($body, $length=250){
// 去除HTML标签和脚本
$text=strip_tags($body);
$text=preg_replace('/\s+/', ' ', $text);
$text=trim($text);
// 智能截取:尽量在句号或段落结束处截断
if(mb_strlen($text) > $length){
$text=mb_substr($text, 0, $length);
$lastPeriod=mb_strrpos($text, '。');
$lastPara=mb_strrpos($text, "\n");
// 优先在句号处截断
if($lastPeriod > $length * 0.7){
$text=mb_substr($text, 0, $lastPeriod + 1);
}
}
return $text;
}
?>
四、批量更新已发布文章的摘要
<?php
// 批量为空摘要的文章生成描述
require_once(dirname(__FILE__)."/include/common.inc.php");
$typeid=isset($_GET['typeid']) ? intval($_GET['typeid']) : 0;
$condition=$typeid > 0 ? "AND typeid={$typeid}" : "";
$sql="SELECT a.id, ad.body FROM dede_archives a
LEFT JOIN dede_addonarticle ad ON a.id=ad.aid
WHERE (a.description='' OR a.description IS NULL) {$condition}
LIMIT 100";
$dsql->SetQuery($sql);
$dsql->Execute();
$count=0;
while($row=$dsql->GetArray()){
if(!empty($row['body'])){
$desc=autoDescription($row['body'], 200);
$desc=addslashes($desc);
$dsql->ExecuteNoneQuery(
"UPDATE dede_archives SET description='{$desc}'
WHERE id={$row['id']}"
);
$count++;
}
}
echo "已为 {$count} 篇文章生成摘要";
?>
五、不同栏目使用不同的摘要策略
<?php
// 根据栏目ID设置不同的摘要长度
function getDescLengthByType($typeid){
$lengthMap=array(
3=> 120, // 新闻栏目:短摘要
5=> 250, // 教程栏目:长摘要
8=> 80, // 图片栏目:极短摘要
);
return $lengthMap[$typeid] ?? 200;
}
// 发布文章时使用
$typeid=intval($_POST['typeid']);
$descLen=getDescLengthByType($typeid);
$description=autoDescription($body, $descLen);
?>
六、模板中备用摘要显示
当摘要为空时的降级方案:
<!-- 智能摘要显示 -->
[field:array runphp='yes']
$desc=@me['description'];
if(empty($desc)){
// 摘要为空,从正文截取
$body=$dsql->GetOne("SELECT body FROM dede_addonarticle
WHERE aid=".@me['id']);
$desc=cn_substr(strip_tags($body['body']), 120);
}
@me='<p class="desc">'.$desc.'</p>';
[/field:array]
摘要优化建议:自动摘要虽然方便,但质量往往不如手动编写。建议重要文章仍由编辑手动填写摘要。自动摘要作为备选方案,适用于批量内容录入场景。摘要长度建议:PC端120-180字,移动端80-120字。