dede文章页调用图片

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

调用文章内容(body)中的第一张图片

这是最常见的需求,比如在文章列表页显示缩略图,或者在文章页上方显示一个特色图。

方法1:使用 preg_match 正则表达式(最推荐)

这是最灵活、最常用的方法,因为它不依赖于Dede的特定函数,可以在任何地方使用。

代码:

{dede:field.body runphp='yes'}
    // 使用正则表达式匹配第一个img标签
    if (preg_match('/<img.*?src="(.*?)".*?>/i', @me, $matches)) {
        // 将匹配到的图片地址赋值给 @me
        @me = $matches[1];
    } else {
        // 如果文章中没有图片,可以设置一个默认图片
        @me = '/images/default.jpg';
    }
{/dede:field.body}

代码解释:

  • {dede:field.body runphp='yes'}:获取文章的 body 字段内容,并开启PHP执行。
  • preg_match('/<img.*?src="(.*?)".*?>/i', @me, $matches):这是核心的正则表达式。
    • <img:匹配 <img 标签开头。
    • 非贪婪匹配任意字符,直到下一个条件满足。
    • src="(.*?)":匹配 src 属性,并捕获 之间的内容(图片地址)。
    • /i:表示不区分大小写进行匹配。
    • @me:此时代表 body 字段的原始内容。
    • $matches:匹配结果会存放在这个数组里,图片地址在 $matches[1] 中。
  • @me = $matches[1]:将捕获到的图片地址重新赋值给 @me,从而在页面上输出。
  • else:如果文章内容里没有找到图片,就输出一个你指定的默认图片路径,避免显示空白或错误图标。

如何使用? 你可以直接将这段代码放在模板的任何需要显示图片的地方,

<!-- 在文章页顶部显示文章第一张图作为大图 -->
<img src="[上面的代码]" alt="{dede:field.title/}" style="width: 100%; max-height: 400px; object-fit: cover;">

方法2:使用DedeCMS内置的函数 GetOneImgUrl

DedeCMS提供了一个专门的函数来获取文章第一张图的地址,使用起来更简单。

代码:

{dede:field.body function='GetOneImgUrl(@me)'/}

代码解释:

  • function='GetOneImgUrl(@me)':这是对 field.body 的内容调用 GetOneImgUrl 这个PHP函数。
  • 这个函数会自动解析 body 中的第一张图片,并返回其完整路径(包括域名)。

如何使用? 与方法1类似,直接放在需要显示图片的地方。

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

调用文章附加图片(多图)

如果你的文章是通过“DedeCMS特有的多图上传功能”添加的图片,那么调用方式就完全不同了,这些图片存储在附加表 dede_addonimages 中。

调用方式: 使用 {dede:field name='imgurls'/}

代码:

{dede:field.imgurls/}

解释: 这个标签会输出文章中所有附加图片的信息,但它不是直接输出 <img> 标签,而是输出一个包含图片信息的数组格式文本,我们需要配合循环和自定义样式来使用。

完整示例(循环显示所有附加图片):

<div class="article-gallery">
    {dede:field.imgurls}
        <li>
            <a href="[field:imgsrc/]" rel="example_group">
                <img src="[field:imgsrc/]" alt="[field:text/]" />
            </a>
        </li>
    {/dede:field.imgurls}
</div>

代码解释:

  • {dede:field.imgurls}...{/dede:field.imgurls}:循环遍历所有附加图片。
  • [field:imgsrc/]:获取单张图片的地址。
  • [field:text/]:获取上传图片时填写的说明文字。

注意: 这种方式调用的图片,是在后台发布文章时,点击“图片集”或“多图”按钮上传的,而不是直接插入到编辑器里的。


调用文章缩略图(litpic)

这是文章发布时,在编辑器下方“高级选项”里设置的缩略图。

调用方式: 使用 {dede:field.litpic/}

代码:

{dede:field.litpic/}

如何使用? 通常用于文章列表页、首页文章摘要等地方。

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

总结与最佳实践

调用目标 推荐代码 适用场景
第一张图 {dede:field.body runphp='yes'}preg_match(...){/dede:field.body} 最常用,文章页大图、列表页自定义缩略图。
第一张图 {dede:field.body function='GetOneImgUrl(@me)'/} 简单快捷,但灵活性不如正则表达式。
文章附加图片(多图) {dede:field.imgurls} 调用通过“图片集”功能上传的图片。
文章缩略图 {dede:field.litpic/} 调用后台设置的专属缩略图。

最佳实践建议:

在开发模板时,为了保证在没有图片时页面依然美观,强烈建议使用方法1(正则表达式),并加上 else 条件来设置一个默认图片。

在文章列表页模板 list_article.htm 中,你可能没有 litpic,但想从 body 里取图,可以这样写:

<li>
    <a href="[field:arcurl/]">
        <img src="
        {dede:field.body runphp='yes'}
            if (preg_match('/<img.*?src="(.*?)".*?>/i', @me, $matches)) {
                @me = $matches[1];
            } else {
                @me = '/static/images/default_thumb.png'; // 你的默认缩略图
            }
        {/dede:field.body}
        " alt="[field:title function='html2text(@me)'/]">
        <h2>[field:title/]</h2>
    </a>
</li>

这样,无论文章有没有图片,你的列表页都能正常显示,用户体验更好。

-- 展开阅读全文 --
头像
Java和C语言,哪个更适合新手入门?
« 上一篇 今天
C程序由什么核心部分构成?
下一篇 » 今天

相关文章

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