dede如何提取文章中的图片?

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

提取文章第一张图片作为文章缩略图(最常用)

这是最经典的需求,通常用于首页、列表页的文章摘要,显示一张代表性的图片。

dede提取文章图片
(图片来源网络,侵删)

方法1:使用DedeCMS自带的 {dede:img} 标签(推荐)

这是最简单、最官方、最高效的方法,直接在模板中使用标签即可,无需修改PHP代码。

使用方法:

在需要显示缩略图的地方(如 arclist.htm, list_article.htm, article_article.htm 等),将原来的缩略图标签: [field:picname/]

替换为: {dede:img text='' width='100' height='100'}[field:body/]{/dede:img}

dede提取文章图片
(图片来源网络,侵删)

参数说明:

  • text='': 图片的替代文本,可以留空或填写描述。
  • width='100': 提取图片的显示宽度(像素)。
  • height='100': 提取图片的显示高度(像素)。
  • [field:body/]: 这是关键,它会指向文章的内容正文,{dede:img} 标签会在这个正文中查找第一张符合尺寸的图片。
  • ismake='yes' (可选): 如果你想强制提取并生成新的缩略图文件,可以加上这个参数,通常情况下,直接使用即可。

示例:

<li>
    <a href="[field:arcurl/]">
        <!-- 使用 {dede:img} 提取文章第一张图 -->
        {dede:img text='[field:title]' width='150' height='100'}[field:body/]{/dede:img}
    </a>
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
</li>

优点:

  • 无需修改代码:纯模板操作,安全、简单。
  • 性能高:标签在页面生成时由DedeCMS解析,效率高。
  • 自动处理:会自动处理图片路径。

方法2:修改 include/inc_arclist_view.php 文件(不推荐,仅作了解)

如果官方标签无法满足你的特殊需求(比如想获取图片地址而不是生成图片),可以修改这个文件。但请注意,修改核心文件在升级时可能会被覆盖,不推荐新手使用。

dede提取文章图片
(图片来源网络,侵删)
  1. 打开文件 /include/inc_arclist_view.php
  2. 找到大约在第236行左右的 InnerText 处理部分。
  3. $this->Fields['imgsrc'] = ''; 这一行下面,添加以下PHP代码:
// 获取文章第一张图片
if (preg_match_all("/<img([^>]*)\s*src=('|\")([^'\"]+)('|\")/i", $this->Fields['body'], $matches)) {
    if (isset($matches[3][0])) {
        $this->Fields['imgsrc'] = $matches[3][0]; // 将第一张图片地址赋给 imgsrc 字段
    }
}

保存文件。

使用方法: 添加完代码后,你就可以在模板中使用 [field:imgsrc/] 来调用文章第一张图片的地址了。

<img src="[field:imgsrc/]" alt="[field:title/]" />

缺点:

  • 修改核心文件:升级DedeCMS时可能会丢失修改。
  • 安全性:直接操作正则表达式,如果规则不严谨可能会有问题。

提取文章中的所有图片,制作图集或图文列表

如果你想在文章详情页或列表页显示文章包含的所有图片,可以使用 {dede:img}listimg 属性。

使用方法:

在模板中,使用以下标签:

{dede:img listimg='yes' width='100' height='100'}[field:body/]{/dede:img}

参数说明:

  • listimg='yes': 这是核心参数,表示提取文章中的所有图片,而不仅仅是第一张。

示例(在文章详情页 article_article.htm 中显示所有图片):

<div class="article-images">
    <h3>文章图片</h3>
    {dede:img listimg='yes' width='200' height='150'}[field:body/]{/dede:img}
</div>

这会输出文章里所有的 <img> 标签,并按照你设定的宽高进行显示。


在PHP代码中提取图片(用于二次开发)

如果你在编写自定义的PHP文件或插件时需要提取图片,可以直接使用正则表达式。

示例代码:

<?php
// 假设 $article_body 是文章的正文内容
$article_body = '<p>这是一段文字,<img src="/uploads/2025/10/01/image1.jpg" alt="图片1">中间有张图片。</p><p>后面还有一张<img src="/uploads/2025/10/02/image2.png" alt="图片2">。</p>';
// 正则表达式,匹配 img 标签中的 src 属性
$pattern = '/<img[^>]*src=["\']([^"\']+)["\'][^>]*>/i';
// 执行匹配
preg_match_all($pattern, $article_body, $matches);
// $matches[1] 将包含所有找到的图片地址
if (isset($matches[1]) && !empty($matches[1])) {
    echo "找到的图片:<br>";
    foreach ($matches[1] as $img_src) {
        echo $img_src . "<br>";
    }
    // 获取第一张图片
    $first_image = $matches[1][0];
    echo "<br>第一张图片是:" . $first_image;
} else {
    echo "文章中没有找到图片。";
}
?>

输出结果:

找到的图片:
/uploads/2025/10/01/image1.jpg
/uploads/2025/10/02/image2.png
第一张图片是:/uploads/2025/10/01/image1.jpg

总结与建议

需求场景 推荐方法 优点 缺点
提取文章第一张图作为缩略图 方法1:{dede:img} 最简单、最安全、性能最高 功能相对固定,灵活性稍差
提取文章所有图片 方法2:{dede:img listimg='yes'} 简单、直接 -
在PHP代码中提取图片 方法3:PHP正则表达式 灵活、强大,适合二次开发 需要一定的PHP编程能力

对于绝大多数用户,强烈推荐使用方法1和方法2,它们能解决90%以上的需求,并且安全可靠。 只有在进行深度二次开发时,才需要考虑使用方法3。

-- 展开阅读全文 --
头像
dede内链tag如何正确设置与优化?
« 上一篇 今天
C语言textattr函数如何设置文本属性?
下一篇 » 今天

相关文章

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

目录[+]