织梦文章缩略图如何批量生成?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 织梦建站 正文

最简单的方法(使用系统自带的 litpic 字段)

这是最直接的方法,前提是你在发布文章时,手动为每篇文章上传并设置了缩略图

织梦更多文章缩略图
(图片来源网络,侵删)

适用场景已经全部上传完成,且每篇文章都有缩略图。

操作步骤

  1. 确保文章有缩略图: 在后台发布文章时,在“常规选项”部分,务必上传一张图片作为“缩略图”。

  2. 修改列表页模板文件: 找到你的列表页模板文件,通常是 templets/default/list_article.htmdefault 是你的默认模板目录,请根据你的实际情况修改)。

    织梦更多文章缩略图
    (图片来源网络,侵删)
  3. 在循环中插入缩略图代码: 在 {dede:list}{dede:arclist} 标签循环体内,添加以下代码来显示缩略图。

    <li>
      <!-- 原有的标题链接 -->
      <a href="[field:arcurl/]">[field:title/]</a>
      <!-- 新增的缩略图 -->
      <a href="[field:arcurl/]">
        <img src="[field:litpic/]" alt="[field:title function='html2text(@me)'/]" />
      </a>
      <!-- 其他信息,如摘要、时间等 -->
      <p>[field:description function='cn_substr(@me, 100)'/]...</p>
      <span>[field:pubdate function='MyDate("Y-m-d", @me)'/]</span>
    </li>

代码解释

  • [field:litpic/]:这是织梦调用文章缩略图地址的核心标签。
  • alt="[field:title function='html2text(@me)'/]":为图片添加 alt 属性,这是SEO优化的重要一步,html2text 函数可以去除标题中的HTML标签。
  • function='cn_substr(@me, 100)':截取摘要的前100个字符,避免过长。

自动提取文章第一张图为缩略图(推荐)

这是最常用也最智能的方法,它不需要你手动上传缩略图,系统会自动从文章内容(body字段)中提取第一张图片作为缩略图。

适用场景:新发布的文章忘记传缩略图,或者希望批量处理旧文章。

织梦更多文章缩略图
(图片来源网络,侵删)

操作步骤

第1步:修改数据库(一次性操作)

织梦默认的列表页调用标签不支持直接从文章内容提取图片,我们需要修改数据库,增加一个“自动缩略图”字段。

  1. 登录你的网站数据库(可以使用 phpMyAdmin 或其他工具)。
  2. 找到你的织梦数据库,找到 dede_archives 表(dede_ 是你的表前缀)。
  3. 点击“结构”,然后点击“插入新字段”。
    • 字段名litpic_auto
    • 类型varchar
    • 长度/值255
    • 保存

第2步:修改 list.php 文件(核心逻辑)

  1. 找到并打开 /include/list.php 文件。

  2. 找到大约在第380行左右的 //排序方式 注释。

  3. 在这行代码 之前,添加以下PHP代码:

    // 自动提取文章第一张图为缩略图
    if($typeid == 0 && $isdefault == -1) {
        $query = "SELECT id,body FROM `#@__archives` WHERE id IN($arcids)";
        $listarr = $dsql->GetAll($query);
        foreach($listarr as $v) {
            $body = $v['body'];
            // 使用正则表达式匹配第一个img标签的src
            preg_match_all('/<img.*?src="(.*?)".*?>/i', $body, $img_array);
            $img_src = $img_array[1][0];
            if($img_src){
                // 如果找到了图片,更新litpic_auto字段
                $upquery = "UPDATE `#@__archives` SET litpic_auto = '$img_src' WHERE id = ".$v['id'];
                $dsql->ExecuteNoneQuery($upquery);
            }
        }
    }

代码解释

  • 这段代码会在生成列表页时,获取当前列表中的所有文章。
  • 使用正则表达式 preg_match_all 从文章的 body 字段中找出第一个 <img> 标签的 src 属性(即图片地址)。
  • 如果找到了图片,就将这个地址更新到我们刚刚创建的 litpic_auto 字段中。

第3步:修改列表页模板

模板中调用我们新创建的 litpic_auto 字段即可。

  1. 打开你的列表页模板 templets/default/list_article.htm

  2. 将方案一中的 [field:litpic/] 替换为 [field:litpic_auto/]

    <li>
      <a href="[field:arcurl/]">
        <!-- 调用自动提取的缩略图 -->
        <img src="[field:litpic_auto/]" alt="[field:title function='html2text(@me)'/]" />
      </a>
      <a href="[field:arcurl/]">[field:title/]</a>
      <p>[field:description function='cn_substr(@me, 100)'/]...</p>
    </li>

第4步:生成列表页面

完成以上修改后,去后台的“更新主页HTML”或“更新栏目HTML”中,重新生成你的列表页面,这时,文章就会自动显示内容中的第一张图片作为缩略图了。


更强大的“无图不显示”逻辑

有时候我们希望,如果文章没有图片,就不显示缩略图占位符,让列表更整洁。

操作步骤

这个方案需要结合方案二,并使用织梦的底层模板(php 模板)来实现。

  1. 修改列表页模板: 将你的列表页模板文件后缀从 .htm 改为 .phplist_article.php

  2. 在模板中编写PHP逻辑: 在 {dede:list} 循环内部,使用PHP来判断。

    {dede:list pagesize='10'}
    <?php
      // 获取当前文章的body内容
      $body = $fields['body'];
      // 检查body中是否包含图片
      if (strpos($body, '<img') !== false) {
        // 如果有图片,显示缩略图
        $has_img = true;
      } else {
        // 如果没有图片,不显示
        $has_img = false;
      }
    ?>
    <li>
      <?php if ($has_img) { ?>
        <a href="<?php echo $fields['arcurl']; ?>">
          <img src="<?php echo $fields['litpic_auto']; ?>" alt="<?php echo $fields['title']; ?>" />
        </a>
      <?php } ?>
      <a href="<?php echo $fields['arcurl']; ?>"><?php echo $fields['title']; ?></a>
      <p><?php echo cn_substr($fields['description'], 100); ?>...</p>
    </li>
    {/dede:list}

代码解释

  • strpos($body, '<img') !== false:这是一个简单的字符串查找,如果文章内容中包含 <img 标签,就认为有图。
  • <?php if ($has_img) { ?> ... <?php } ?>:通过这个条件判断,只有当 $has_imgtrue 时,才渲染缩略图的HTML代码。

总结与建议

方案 优点 缺点 推荐度
手动litpic 简单直接,无需修改代码 需要手动上传,内容多时很繁琐 ⭐⭐
自动提取 智能高效,自动化处理,一劳永逸 需要修改数据库和核心文件,有技术门槛 ⭐⭐⭐⭐⭐ (强烈推荐)
无图不显示 页面更整洁,用户体验好 需要使用PHP模板,逻辑稍复杂 ⭐⭐⭐⭐

给你的建议

对于大多数网站,方案二(自动提取)是最佳选择,它完美地解决了手动上传缩略图的痛点,让内容发布流程更顺畅,虽然初期需要做一些设置,但长期来看非常值得。

如果你对页面美观度要求极高,可以考虑在方案二的基础上,再采用方案三的逻辑,实现“有图才显示”的效果。

-- 展开阅读全文 --
头像
织梦怎么添加留言板
« 上一篇 04-29
谭浩强C语言基础教程该怎么学?
下一篇 » 04-29

相关文章

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

目录[+]