织梦cms栏目自动摘要

自动摘要概述

织梦CMS的自动摘要功能可以在发布文章时自动从正文中提取摘要(description字段),减少编辑手动填写摘要的工作量。通过配置截取规则和使用模板函数,可以灵活控制自动摘要的生成方式。

一、开启自动摘要功能

系统层面的自动摘要设置:

  1. 进入 系统 > 系统基本参数
  2. "核心设置"中找到摘要相关设置:
自动生成摘要:         是
摘要最大长度:         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字。