使用全局变量 {dede:global}

DedeCMS 强烈推荐使用全局变量来定义网站的根目录,而不是在模板中写死绝对路径(如 )或相对路径(如 ),这样做的好处是:

dedecms 模板图片路径
(图片来源网络,侵删)
  1. 可移植性强:当你把网站从本地环境(如 localhost)迁移到线上服务器时,只需要修改一个全局变量的值,所有模板中的路径都会自动更新,无需逐个修改模板文件。
  2. 维护方便:统一管理,不易出错。

全局变量名称

DedeCMS 默认的全局变量名称是 cfg_cmspath,它指向你网站的根目录,通常是一个绝对路径,

  • 本地环境:http://localhost/your_site
  • 线上环境:http://www.yourdomain.com

如何在模板中使用图片路径

下面我们分几种常见情况来说明具体用法。

调用全局变量

在模板文件(.htm)中,使用以下语法来调用全局变量:

{dede:global name='cfg_cmspath'/}

这个标签在渲染时会被替换成你在后台设置的网站根目录 URL。

dedecms 模板图片路径
(图片来源网络,侵删)

常见应用场景

调用模板目录下的图片

这是最常见的情况,你的图片存放在 /templets/default/ 目录下。

假设图片路径是:/templets/default/images/logo.png

错误写法(不推荐):

dedecms 模板图片路径
(图片来源网络,侵删)
<img src="/templets/default/images/logo.png" alt="Logo">

这种写法在根目录下访问正常,但如果网站放在子目录(如 http://www.domain.com/my_site/),图片就会找不到。

正确写法(推荐):

<img src="{dede:global name='cfg_cmspath'/}/templets/default/images/logo.png" alt="Logo">

解析:

  • {dede:global name='cfg_cmspath'/} 会被替换为 http://www.yourdomain.com
  • 最终生成的 HTML <img src="http://www.yourdomain.com/templets/default/images/logo.png" alt="Logo">,无论网站部署在哪个目录下,这个路径都是正确的。

简写写法(更推荐): DedeCMS 提供了一个简化的全局变量标签 {dede:global/},它默认指向 cfg_cmspath,所以上面的代码可以简化为:

<img src="{dede:global/}/templets/default/images/logo.png" alt="Logo">

最佳实践: 为了避免每次都写长长的路径,你可以在模板的公共头部(如 head.htm)定义一个变量。

head.htm 中加入:

{dede:global name='cfg_templets_dir'/}/images/
  • cfg_templets_dir 是 DedeCMS 内置的变量,直接指向 /templets/ 目录。
  • 这个标签会被渲染成 /templets/default/images/ (假设你使用的是 default 模板)。

然后在其他模板文件中,你就可以这样调用:

<img src="{dede:global name='my_img_path'/}logo.png" alt="Logo">

或者更直接地在 head.htm 里定义好图片基础路径:

{dede:global name='cfg_templets_dir'/}/default/images/

然后在页面中:

<img src="{dede:global name='cfg_templets_dir'/}/default/images/logo.png" alt="Logo">

这是最清晰、最灵活的方式。


调用网站根目录下的图片

如果你的图片存放在 /images/ 目录(即网站根目录下的 images 文件夹)。

正确写法:

<img src="{dede:global/}/images/banner.jpg" alt="Banner">

调用文章或栏目内容中的图片

这种情况最复杂,因为图片路径是保存在数据库里的,通常是相对路径(如 ../uploads/images/2025/10/a.jpg)。

DedeCMS 提供了 {dede:field} 标签的 function 属性来处理这个问题,它会自动将文章中的相对路径转换为基于网站根目录的绝对路径。

假设文章内容里有一张图片:<img src="../uploads/allimg/230101/1-2301011F530.jpg" ...>

错误写法: 直接使用 {dede:field.body/},图片路径会是错误的。

正确写法(推荐):

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

或者更明确地使用 str_replace 来处理:

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

解析:

  • function='...' 表示对 field.body 的内容执行一个 PHP 函数。
  • str_replace("../","{dede:global/}/",@me) 会查找内容中所有的 ,并将其替换为 {dede:global/}/ 的值。
  • {@me} 是一个特殊变量,代表当前标签的原始值(在这里就是 field.body 的内容)。
  • 使用 htmlspecialchars() 可以防止 XSS 攻击,是更安全的做法。

如何设置全局变量

你需要确保 cfg_cmspath 的值是正确的。

  1. 登录 DedeCMS 后台。
  2. 进入 【系统】 -> 【系统基本参数】
  3. 在左侧菜单选择 【核心设置】
  4. 找到 “站点根目录URL” 这一项,确保它的值是正确的网站地址(http://www.yourdomain.com),并且不要在末尾加上斜杠 。

总结与最佳实践

场景 推荐写法 说明
模板内图片 {dede:global name='cfg_templets_dir'/}/default/images/logo.png 使用 cfg_templets_dir 变量,清晰且易于维护。
根目录图片 {dede:global/}/images/banner.jpg 使用简化的全局变量 {dede:global/}
文章/栏目图片 {dede:field.body function='htmlspecialchars(@me)'/} 使用 function 属性自动处理路径,安全可靠。
CSS/JS 引入 <link rel="stylesheet" href="{dede:global name='cfg_templets_dir'/}/default/style.css"> 同样推荐使用全局变量。

核心要点:

  1. 永远不要写死绝对路径 ,除非你确定网站永远只部署在根目录。
  2. 优先使用 DedeCMS 的全局变量,特别是 {dede:global name='cfg_cmspath'/}{dede:global name='cfg_templets_dir'/}
  3. 在公共模板文件(如 head.htm)中定义好路径变量,然后在各页面中调用,这是最规范的做法。
  4. 处理文章内容图片时,务必使用 function 属性,让 DedeCMS 自动帮你转换路径。

遵循以上原则,你的 DedeCMS 网站图片路径问题基本就可以一劳永逸了。