为何不自动获取?

99ANYc3cd6
预计阅读时长 10 分钟
位置: 首页 DEDE建站 正文
  1. 修改程序,让它在发布文章时自动获取摘要。 (治本之策,一劳永逸)
  2. 在后台手动填写摘要,或者使用SQL命令批量为已有文章生成摘要。 (临时方案或补充方案)

下面我将详细介绍这两种方法,强烈推荐使用第一种方法

dede摘要不自动获取
(图片来源网络,侵删)

修改程序,实现自动获取摘要(推荐)

这个方法的核心是修改DedeCMS的发布文章处理文件,让它在保存文章时,自动从正文中截取一部分内容作为摘要。

操作步骤:

  1. 找到核心文件 你需要修改的文件是:/dede/article_add.php 这个文件是处理后台“新增文章”表单提交的核心逻辑。

  2. 定位关键代码article_add.php 文件中,找到处理摘要(description)字段的代码段,通常在文件中下部,类似这样:

    // ... 其他代码 ...
    $description = cn_substr($description, $descriptionlen);
    // ... 其他代码 ...
    $query = "INSERT INTO `dede_archives`(...)";
    // ... 其他代码 ...

    我们需要在这个位置添加自动生成摘要的逻辑。

    dede摘要不自动获取
    (图片来源网络,侵删)
  3. 添加自动摘要代码description 变量被使用之前(即在 INSERT 语句之前),插入以下代码:

    // 自动获取摘要 Start
    if (empty($description)) {
        // 如果摘要为空,则从body中自动提取
        // $body 是文章正文,已经在 article_add.php 中定义
        $description = cn_substr(html2text($body), 250); // 提取前250个字符作为摘要
    }
    // 自动获取摘要 End

    代码解释:

    • if (empty($description)):判断提交的摘要是否为空,如果为空,则执行自动获取。
    • html2text($body):这是一个DedeCMS内置的函数,用于将HTML格式的文章正文($body)转换为纯文本,这非常重要,因为它会移除HTML标签、图片、代码等,只保留文字内容,确保摘要干净整洁。
    • cn_substr(..., 250):这是DedeCMS的截取字符串函数,250是截取的长度(字符数),你可以根据需要调整这个值,通常200-500之间比较合适。
  4. 保存并测试 保存修改后的 article_add.php 文件,当你去后台发布新文章时,如果不填写摘要,系统会自动从正文中截取内容填充进去。


手动或批量处理现有文章

这个方法不改变程序行为,而是解决“已经发布的文章没有摘要”的问题。

dede摘要不自动获取
(图片来源网络,侵删)

手动填写(最简单但最耗时)

对于少量文章,直接在后台编辑文章,手动填写摘要即可。

使用SQL命令批量生成(适用于大量文章)

如果你有大量历史文章没有摘要,手动填写不现实,可以通过执行SQL语句来批量更新。

⚠️ 重要警告: 在执行任何SQL操作前,务必备份数据库!以防操作失误导致数据丢失。

操作步骤:

  1. 登录你的网站数据库管理工具(如 phpMyAdmin)。

  2. 选择你的DedeCMS数据库。

  3. 点击“SQL”选项卡,输入以下命令:

    -- 为所有文章(非生成HTML的)生成摘要
    UPDATE dede_archives a
    LEFT JOIN dede_addonarticle d ON a.id = d.aid
    SET a.description = SUBSTRING(HTML2TEXT(d.body), 1, 250)
    WHERE a.typeid != '-1' AND a.description = '';

    SQL语句解释:

    • UPDATE dede_archives a:要更新的主表是 dede_archives(文章列表表),并给它一个别名 a
    • LEFT JOIN dede_addonarticle d ON a.id = d.aid:因为文章正文在附加表 dede_addonarticle 中,所以需要通过 id(主表ID)和 aid(附加表文章ID)关联起来,别名 d
    • SET a.description = ...:设置摘要字段的值。
    • SUBSTRING(HTML2TEXT(d.body), 1, 250):这是核心逻辑。
      • HTML2TEXT(d.body):将附加表中的正文 d.body 从HTML转为纯文本。
      • SUBSTRING(..., 1, 250):从转换后的纯文本中截取前250个字符。
    • WHERE a.typeid != '-1' AND a.description = '':这是更新条件。
      • a.typeid != '-1':排除掉系统生成的特殊文章(如首页、栏目页等),它们的 typeid 是 -1。
      • a.description = '':只更新摘要为空的文章,避免覆盖掉你已经手动填写的摘要。
  4. 点击“执行”按钮。

  5. 执行成功后,所有符合条件的文章摘要都会被自动填充,你可以去后台刷新一下文章列表,检查结果。


方法 优点 缺点 适用场景
修改程序 一劳永逸,新文章自动处理,符合系统逻辑。 需要修改核心文件,对新手有技术门槛。 强烈推荐,适用于所有希望提升效率的用户。
SQL批量更新 快速解决历史文章摘要问题,无需修改程序。 只是一次性操作,新文章仍需手动或再次执行SQL。 主要用于处理已发布文章的摘要补全问题。

最佳实践建议:

  1. 首先使用方法一,修改 article_add.php,确保未来发布的文章都能自动获取摘要。
  2. 使用方法二的SQL命令,一次性为你的网站历史文章批量生成摘要,让整个网站的摘要都完整起来。
-- 展开阅读全文 --
头像
如何用C语言开发JSON应用?
« 上一篇 今天
织梦怎么添加友情链接
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]