dede标签图片路径如何正确调用?

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

核心问题:为什么图片路径会出错?

DedeCMS 的图片路径问题通常源于两种情况:

dede 标签里面的图片路径
(图片来源网络,侵删)
  1. 静态化生成:DedeCMS 生成的是 HTML 静态文件,当你在后台设置“使用绝对路径”时,生成的路径是 http://www.yourdomain.com/uploads/xxx.jpg;如果不设置,则可能是相对路径 ../uploads/xxx.jpg/uploads/xxx.jpg
  2. 后台与前台路径不一致:你可能在后台编辑文章时看到的图片路径是正确的,但前台调用时因为路径解析问题导致图片无法显示。

理解了这一点,我们来看具体的解决方案。


中的图片({dede:field.body/}{dede:field.content/}

这是最常见的情况,文章内容是通过富文本编辑器(如ckeditor)编辑的,图片已经上传到服务器,并且路径被保存在数据库的 bodycontent 字段中。

问题:在文章列表页或首页调用 {dede:field.body/} 时,如果图片路径是相对路径,且当前页面层级较深,图片可能无法显示。

解决方案

dede 标签里面的图片路径
(图片来源网络,侵删)

最佳实践:在后台开启“使用绝对路径”

这是最简单、最根本的解决方法,当你开启此选项后,DedeCMS 在生成文章静态页时,会自动将文章中的所有相对路径图片转换为完整的、带域名的绝对路径。

操作步骤

  1. 登录 DedeCMS 后台。
  2. 进入【系统】-> 【系统基本参数】。
  3. 在左侧菜单选择【核心设置】。
  4. 找到 “是否使用绝对路径” 选项,将其设置为 “”。
  5. 点击 “保存” 按钮。

原理: 开启后,DedeCMS 在生成文章时,会通过正则表达式替换文章内容中的相对路径(如 src="/uploads/..."src="../uploads/...")为 src="http://www.yourdomain.com/uploads/...",这样,无论你的网站被部署在任何目录下,图片路径都是正确的。


调用文章缩略图({dede:field.litpic/}

缩略图是在发布文章时手动上传或自动裁剪生成的,其路径保存在数据库的 litpic 字段中。

问题{dede:field.litpic/} 默认调用的是相对路径,可能导致图片不显示。

解决方案

方法1:使用 @me 进行路径替换(推荐)

这是最灵活、最常用的方法,可以在模板中直接对路径进行处理。

{dede:field name='litpic' function='str_replace("@me","/uploads/", "http://www.yourdomain.com/uploads/")/'}

代码解析

  • function='...':对标签的值执行一个 PHP 函数。
  • str_replace():PHP 的字符串替换函数。
  • "@me":这是 DedeCMS 标签函数中的一个特殊变量,代表标签本身当前的值,即 {dede:field.litpic/} 的原始值(如 /uploads/2025/10/xx.jpg)。
  • "/uploads/":要被替换掉的字符串。
  • "http://www.yourdomain.com/uploads/":替换成的新字符串。

更简洁的写法(推荐): 如果缩略图路径都是以 /uploads/ 开头的,可以这样写:

{dede:field.litpic function='str_replace("@me", "http://www.yourdomain.com", "@me")/'}

这个写法会把路径中的域名部分补全。

方法2:在标签循环外统一处理

如果你在一个列表页中循环调用文章,并且希望所有缩略图都使用绝对路径,可以在循环外部定义一个变量,然后在循环内使用。

{dede:arclist typeid='1' titlelen='30'}
    <li>
        <!-- 
            这里用 [field:litpic/] 获取图片路径,
            然后在前面拼接上你的域名
        -->
        <img src="http://www.yourdomain.com/[field:litpic/]" alt="[field:title/]">
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

注意:这种方法硬编码了域名,不利于网站迁移,如果网站可能更换域名,方法1 更优。


调用自定义字段中的图片

如果你在模型中添加了一个自定义字段,类型为“图片”,那么调用的方式与缩略图类似。

假设你的自定义字段名为 myimg

解决方案

同样使用 function 函数进行路径替换。

{dede:field.myimg function='str_replace("@me", "http://www.yourdomain.com", "@me")/'}

或者在列表标签中:

{dede:arclist}
    <img src="http://www.yourdomain.com/[field:myimg/]">
{/dede:arclist}

调用系统内置的图片(如栏目图标、广告图等)

这些图片路径通常也存储在数据库中,调用方式与自定义字段类似,只是标签名不同,调用栏目图标 {dede:field.typelink/} 中的图片也需要进行路径处理。


总结与最佳实践

场景 推荐解决方案
{dede:field.body/} 后台核心设置 -> 开启“使用绝对路径”(一劳永逸)
文章缩略图 {dede:field.litpic/} 使用 function='str_replace("@me", "http://www.yourdomain.com", "@me")/'
自定义字段图 {dede:field.自定义字段名/} 使用 function='str_replace("@me", "http://www.yourdomain.com", "@me")/'
列表页缩略图 [field:litpic/] 直接在标签前拼接域名:http://www.yourdomain.com/[field:litpic/]

重要提醒

  1. 开启“使用绝对路径”后,DedeCMS 会在生成静态页时处理路径,这意味着你修改设置后,需要重新生成相关的 HTML 页面(如文章页、列表页)才能生效。
  2. 域名问题:如果你的网站在本地开发(localhost)和线上服务器使用不同的域名,使用 str_replace 硬编码域名会带来麻烦,DedeCMS 提供了一个全局变量 {dede:global.cfg_basehost/} 来获取网站在后台设置的“站点根网址”,这是更专业的做法。

更专业的写法(推荐用于缩略图)

{dede:field.litpic function='str_replace("@me", "{dede:global.cfg_basehost/}", "@me")/'}

这样无论你的域名是什么,都会自动替换成后台设置的域名,网站迁移时也无需修改模板。

-- 展开阅读全文 --
头像
织梦首页收藏代码如何实现?
« 上一篇 01-22
dede列表页不用循环如何实现?
下一篇 » 01-22

相关文章

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

目录[+]