获取网站根目录的物理路径(服务器路径)
这是最常用且最可靠的方法,通常用于文件操作,如包含文件、创建文件、写入日志等。

使用 DedeCMS 全局变量 DEDEROOT
这是 DedeCMS 内置的变量,直接指向网站的根目录在服务器上的物理路径。强烈推荐使用此方法。
示例代码:
<?php // 获取网站根目录的物理路径 $root_path = DEDEROOT; echo $root_path; // 输出结果类似:/home/wwwroot/your_website/ ?>
使用 PHP 内置常量 __ROOT__
DedeCMS 在初始化时会定义一个魔术常量 __ROOT__,它等同于 DEDEROOT,效果完全一样。
示例代码:

<?php // 获取网站根目录的物理路径 $root_path = __ROOT__; echo $root_path; // 输出结果类似:/home/wwwroot/your_website/ ?>
使用 PHP 全局变量 $cfg_basedir
这个变量在 include/common.inc.php 文件中被定义,通常也指向网站根目录,但不如 DEDEROOT 标准和稳定。
示例代码:
<?php // 获取网站根目录的物理路径 $root_path = $cfg_basedir; echo $root_path; // 输出结果类似:/home/wwwroot/your_website/ ?>
在模板文件(.htm)或 PHP 文件中,优先使用 DEDEROOT 或 __ROOT__。
获取当前页面的 URL 地址(浏览器访问路径)
如果你需要获取当前页面的完整 URL,比如用于跳转、分享或 JS 调用,可以使用以下方法。

在 PHP 文件中获取
使用 PHP 超全局变量 $_SERVER。
示例代码:
<?php // 获取当前页面的完整 URL $current_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // 如果是 HTTPS // $current_url = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; echo $current_url; // 输出结果类似:http://www.your_website.com/a/123.html ?>
在模板文件(.htm)中获取
模板文件中无法直接使用 $_SERVER,你需要通过自定义函数或全局变量来实现。
方案 A:在 PHP 文件中定义,传递给模板
这是最规范的方法,在你的 PHP 代码中获取 URL,然后使用 Assign() 方法传递给模板。
PHP 文件 (article_archives.php 示例):
<?php require_once(dirname(__FILE__) . "/include/common.inc.php"); // 获取当前页面URL $current_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // 将URL变量分配给模板 $dsql->SetTemplet($cfg_basedir . $cfg_templets_dir . "/default/article_archives.htm"); $dsql->Display(); ?>
模板文件 (article_archives.htm 示例):
<!DOCTYPE html>
<html>
<head>{dede:field.title/}</title>
</head>
<body>
<p>当前页面URL是:{dede:global.current_url/}</p>
{dede:field.body/}
</body>
</html>
注意: 上面的方法需要修改 DedeCMS 的底层类库来支持 global 变量传递,比较麻烦。
方案 B:使用自定义全局变量(推荐)
在 include/common.inc.php 文件中,添加一行代码来定义一个全局变量。
修改 include/common.inc.php 文件:
找到文件末尾,在 ?> 之前添加以下代码:
// 定义当前页面URL的全局变量 $GLOBALS['cfg_phpurl'] = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
然后在模板文件中就可以直接使用了。
模板文件 (.htm) 示例:
<!DOCTYPE html>
<html>
<head>{dede:field.title/}</title>
</head>
<body>
<p>当前页面URL是:{$cfg_phpurl}</p>
{dede:field.body/}
</body>
</html>
注意: 这种方法获取的是 PHP 文件本身的路径,URL 中有 后面的参数,可能会丢失,对于列表页、首页等比较有效。
在模板文件中获取当前栏目/文档的相对路径
DedeCMS 的模板引擎自身提供了一些变量来获取当前环境的路径信息。
获取当前栏目链接
使用 示例代码 (模板文件): 这个标签会自动解析为当前栏目所在的 URL。 使用 示例代码 (模板文件): 这个标签在文章内容页模板(如 核心要点: 希望这份详细的解答能帮助你解决问题!{dede:field name='typeurl'/}
<a href="{dede:field name='typeurl'/}">返回本栏目</a>
获取当前文档链接
{dede:field name='arcurl'/}
<p>本文链接:<a href="{dede:field name='arcurl'/}">{dede:field.title/}</a></p>
article_archives.htm)中有效,会输出当前文章的 URL。
总结与最佳实践
需求场景
推荐方法
位置
示例
获取服务器根目录路径 (用于文件操作)
DEDEROOT 或 __ROOT__PHP 文件、模板文件
$path = DEDEROOT . '/data/';
获取当前页面的完整 URL
$_SERVER['HTTP_HOST'] 和 $_SERVER['REQUEST_URI']PHP 文件
$url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
在模板中获取当前栏目 URL
{dede:field name='typeurl'/}模板文件 (
.htm)<a href="{dede:field name='typeurl'/}">
在模板中获取当前文章 URL
{dede:field name='arcurl'/}页模板 (
.htm)<a href="{dede:field name='arcurl'/}">
DEDEROOT,这是 DedeCMS 的标准。$_SERVER,这是 PHP 的标准。
