织梦如何自动提取文章缩略图?

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

使用织梦自带的 {dede:field name='litpic' /} 标签 (最简单)

这是最直接、最基础的方法,用于调用文章在后台设置的“缩略图”字段。

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

适用场景:

  • 文章在后台发布时,已经手动上传或选择了缩略图。
  • 你只需要在列表页或内容页调用这个固定的缩略图。

代码示例:

在列表页(如 arclist.htm)中使用:

{dede:arclist typeid='1' row='8'}
    <li>
        <a href="[field:arcurl/]" title="[field:title/]">
            <!-- 调用缩略图 -->
            <img src="[field:litpic/]" alt="[field:title/]" />
        </a>
        <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
    </li>
{/dede:arclist}

页(如 article_article.htm)中使用:

<img src="{dede:field name='litpic'/}" alt="{dede:field name='title'/}" />

说明:

  • [field:litpic/]{dede:field name='litpic' /} 会直接输出文章在后台设置的缩略图路径。
  • 如果文章没有设置缩略图,这个标签会输出空值,图片会显示不出来。

获取文章第一张图为缩略图 (最常用、最智能)

很多情况下,我们希望文章如果没有单独设置缩略图,就自动从文章内容(body字段)中提取第一张图片作为缩略图,这需要用到织梦的PHP函数。

适用场景:

  • 希望缩略图自动来源于文章内容,减少手动操作。
  • 是目前大多数织梦网站采用的主流方案。

实现步骤:

修改织梦核心文件 include/extendfun.php

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

这是最关键的一步,我们需要在这个文件里添加一个自定义函数来获取第一张图片。

  • 打开你的织梦程序目录下的 include/extendfun.php 文件。
  • 在文件末尾 ?> 之前,添加以下PHP代码:
/**
 * 获取文章内容中的第一张图片路径
 * @param string $body 文章内容
 * @return string 图片路径,如果没有则返回默认图
 */
function GetFirstImg($body)
{
    $preg = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i";
    preg_match_all($preg, $body, $match);
    if (!empty($match[1])) {
        // 如果找到了图片,返回第一张
        return $match[1][0];
    } else {
        // 如果没找到图片,返回一个默认的缩略图路径
        // 请将 '/images/default.jpg' 替换为你自己的默认图片路径
        return '/images/default.jpg';
    }
}

在模板文件中使用自定义函数

添加好函数后,你就可以在模板里通过 {dede:field name='body' function='GetFirstImg(@me)'/} 来调用了。

代码示例:

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

在列表页(arclist.htm)中使用:

{dede:arclist typeid='1' row='8'}
    <li>
        <a href="[field:arcurl/]" title="[field:title/]">
            <!-- 调用自定义函数,从body中获取第一张图 -->
            <img src="[field:body function='GetFirstImg(@me)'/]" alt="[field:title/]" />
        </a>
        <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
    </li>
{/dede:arclist}

页(article_article.htm)中使用:**

<img src="{dede:field name='body' function='GetFirstImg(@me)'/}" alt="{dede:field name='title'/}" />

说明:

  • function='GetFirstImg(@me)' 的意思是:将当前字段的值(这里是 {dede:field name='body'} 的内容)作为参数 @me 传递给 GetFirstImg 函数。
  • 这个方法非常灵活,如果文章有设置 litpic,它依然会优先使用 litpic,如果没设置,才会去 body 里找,如果你想强制只使用 body 里的图,则需要修改逻辑。
  • 强烈建议:在函数中设置一个默认图片路径,这样当文章既没有设置缩略图也没有内容图片时,会显示一张默认图,避免页面空白或显示破碎图标。

调用自定义字段中的缩略图 (更灵活)

如果你的网站需要为不同栏目或不同类型的文章设置不同类型的缩略图,可以使用织梦的自定义字段功能。

适用场景:

  • 需要为文章上传多张图片,并指定其中某一张作为特定用途的缩略图。
  • 栏目有不同的展示样式,需要调用不同位置的图片。

实现步骤:

后台添加自定义字段

  • 进入后台 -> “核心” -> “内容模型管理” -> 选择你的文章模型(如“文章”)-> “管理字段”。
  • 点击“添加新字段”。
    • 字段名:填写 smallpic (或你喜欢的名字,英文,不能和已有字段重复)。
    • 字段类型:选择“图片(单选)”。
    • 字段提示:填写“文章小图”。
    • 后台参数:根据需要设置,显示表单单选框”。
    • 保存

在文章发布页添加上传按钮

  • 进入后台 -> “模板” -> “默认模板管理” -> 找到文章发布页模板(通常是 article_add.htm)。
  • 在合适的位置(比如缩略图上传框旁边)添加以下代码,让作者可以上传这个新的自定义字段图片:
    <dd>
        <label>文章小图:</label>
        <input type="text" name="smallpic" id="smallpic" style="width:300px" />
        <input type="button" name="setsmallpic" value="浏览..." onclick="SelectImage('form1.smallpic','bigimage')"/>
    </dd>

在模板中调用自定义字段

现在你就可以在模板中调用这个新字段了。

代码示例:

<!-- 在列表页或内容页中调用 -->
<img src="{dede:field name='smallpic'/}" alt="{dede:field name='title'/}" />

说明:

  • 这种方法提供了极大的灵活性,但需要额外在后台配置字段和模板。
  • 字段名 smallpic 是我自定义的,你可以改成任何你喜欢的名字,调用时 {dede:field name='你的字段名' /} 也要对应上。

总结与对比

方法 优点 缺点 适用场景
{dede:field.litpic/} 简单、直接,无需修改代码。 必须手动设置,否则无图。 后台严格规范,每篇文章都设置了缩略图。
获取首图 智能、自动化,减少工作量,用户体验好。 需要修改核心文件 extendfun.php,有升级被覆盖的风险。 强烈推荐,适用于绝大多数网站。
自定义字段 灵活性极高,可满足复杂需求。 配置较复杂,需要修改后台模板和模型。 对图片有特殊要求,如多图选择、不同栏目不同样式等。

最佳实践建议:

对于大多数网站,推荐使用“方法二”,它结合了自动化和实用性,是当前最主流和高效的解决方案,记得在修改 extendfun.php 后,最好备份一下该文件,以防未来织梦升级时被覆盖。

-- 展开阅读全文 --
头像
dede如何批量替换标题?
« 上一篇 04-22
织梦缩略图为何等于原图?
下一篇 » 04-22

相关文章

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

目录[+]