dede如何提取文章第一张图作缩略图?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文

手动方法(最简单、最常用)

这是最直接、最稳定的方法,适用于所有版本的 DedeCMS。

dede提取第一个图片为缩略图
(图片来源网络,侵删)

操作步骤:

  1. 编写文章时,在内容区第一行插入图片 在你使用编辑器(如ckeditor)编写文章内容时,确保你想要作为缩略图的那张图片,是文章正文中的第一张图片

  2. 在缩略图输入框中调用 在文章编辑页面的下方,找到“缩略图”这一栏,不要手动上传图片,而是在输入框中输入以下代码:

    {dede:field.body runphp='yes'}
    $str = @me;
    $regx = "/<img[^>]+src\s*=\s*['\"]([^'\"]+)['\"][^>]*>/is";
    preg_match_all($regx, $str, $matches);
    @me = !empty($matches[1][0]) ? $matches[1][0] : '';
    {/dede:field.body}
  3. 保存 点击“保存”或“发布”按钮,系统会自动执行这段代码,从文章正文中提取第一张图片的地址,并填入“缩略图”字段中。

    dede提取第一个图片为缩略图
    (图片来源网络,侵删)

优点:

  • 简单直接:无需修改核心文件,对新手友好。
  • 灵活可控:你只需要确保正文第一张图是你想要的图即可。

缺点:

  • 每次发布都需要手动填写:如果文章内容里没有图片,或者第一张图不是你想要的,你仍然需要手动上传或修改。

自动方法(一劳永逸,需修改文件)

如果你希望所有新发布的文章都自动从正文中提取第一张图作为缩略图,无需手动操作,那么就需要修改 DedeCMS 的核心文件。修改核心文件前,请务必备份原文件!

这个方法通过修改发布文章的PHP文件,让它在保存文章时自动执行提取逻辑。

dede提取第一个图片为缩略图
(图片来源网络,侵删)

操作步骤:

假设你的 DedeCMS 安装在 DedeCMS 目录下。

  1. 找到并打开文件 打开 DedeCMS/dede/article_add.php 文件,这是处理“添加文章”逻辑的核心文件。

  2. 定位关键代码 在文件中,找到处理缩略图上传的代码段,通常在文件末尾,$arc->Close() 之前,你会看到类似 $litpic = $GLOBALS['cfg_multi_site'] == 'Y' ? $GLOBALS['cfg_basehost'].$upfile : $upfile; 这样的代码。

  3. 添加自动提取代码 在处理缩略图上传的代码段附近,添加以下PHP代码,这段代码的作用是,如果用户没有上传缩略图($litpic为空),则尝试从文章正文中提取第一张图。

    // --- 在这里添加开始 ---
    // 如果没有上传缩略图,则尝试从正文中提取第一张图
    if (empty($litpic) && $body != '')
    {
        $regx = "/<img[^>]+src\s*=\s*['\"]([^'\"]+)['\"][^>]*>/is";
        preg_match_all($regx, $body, $matches);
        if (!empty($matches[1][0]))
        {
            $litpic = $matches[1][0];
        }
    }
    // --- 在这里添加结束 ---

    添加位置示例:

    // ... 原有代码 ...
    //上传缩略图
    if($litpic!='' && $isremote == 0)
    {
        $litpic = UploadOne($litpic, 'lit', $cfg_ddimg_width);
        if($litpic=='')
        {
            $litpic = '';
        }
    }
    // --- 【在此处插入上面的自动提取代码块】 ---
    // ... 原有代码 ...
    $arc->ArcSort = $typeid;
    $arc->description = $description;
    $arc->keywords = $keywords;
    $arc->Litpic = $litpic; //设置缩略图
    $arc->Source = $source;
    $arc->dutyadmin = $adminid;
    $arc->filename = $filename;
    $arc->SendRank = $sendrank;
    $arc->arctitle = $title;
    $arc->arcbody = $body;
    $arc->typeid = $typeid;
    $arc->redirecturl = $redirecturl;
    $arc->templet = $templet;
    $arc->channelid = $channelid;
    $arc->adminid = $adminid;
    $arc->mid = $adminid;
    $arc->click = $click;
    $arc->money = $money;
    $arc->arcclick = $arcclick;
    $arc->Close();
    }
    // ... 原有代码 ...
  4. 保存文件 保存 article_add.php 文件。

效果: 当你发布新文章时,缩略图”一栏为空,系统会自动扫描文章正文 {$body},并把找到的第一张图片的路径赋值给 $litpic 变量,从而自动设置缩略图。

优点:

  • 全自动:发布文章时无需关心缩略图,系统自动处理。
  • 提高效率:特别适合内容量大的网站。

缺点:

  • 需要修改核心文件:升级 DedeCMS 时,这些修改可能会被覆盖,需要重新修改。
  • 对已有文章无效:这个修改只对“新发布”的文章生效,之前已经发布的文章,缩略图字段仍然是空的。

补充:如何处理没有图片的文章

无论是手动还是自动方法,如果文章中没有图片,缩略图字段就会是空的,这会导致前台模板调用时显示一个破损的图片图标。

解决方案:

在模板文件中(通常是 list_article.htmarticle_image.htm),调用缩略图的地方使用 if 判断,提供一个默认图片。

示例代码:

{dede:field name='litpic' runphp='yes'}
if(@me == '') {
    @me = '/images/default_thumb.jpg'; // 设置你的默认图片路径
}
else {
    @me = @me; // 保持原样
}
{/dede:field}

或者更简洁的写法:

<img src="{dede:field name='litpic' function='(@me=="" ? "/images/default_thumb.jpg" : @me)'/}" alt="{dede:field.title/}" />

你需要准备一张默认的缩略图(default_thumb.jpg),并上传到网站的 /images/ 目录下,然后将路径替换到代码中。

方法 优点 缺点 适用场景
手动方法 简单、灵活、无需修改文件 每次发布都需要手动操作 网站文章数量不多,或者需要精确控制缩略图的情况。
自动方法 全自动、一劳永逸 需修改核心文件、升级后可能失效、对旧文章无效 文章量大的网站,追求发布效率,不介意修改核心文件。

对于大多数用户来说,方法一(手动方法) 结合模板默认图片已经足够好用,如果你是开发者或者追求极致的自动化,可以选择方法二(自动方法)

-- 展开阅读全文 --
头像
Win7 64位系统如何选择C语言编程软件?
« 上一篇 01-09
dede百度结构化数据插件怎么用?
下一篇 » 01-09
取消
微信二维码
支付宝二维码

目录[+]