dede如何获取当前路径?

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

获取网站根目录的物理路径(服务器路径)

这是最常用且最可靠的方法,通常用于文件操作,如包含文件、创建文件、写入日志等。

dede 获取当前路径
(图片来源网络,侵删)

使用 DedeCMS 全局变量 DEDEROOT

这是 DedeCMS 内置的变量,直接指向网站的根目录在服务器上的物理路径。强烈推荐使用此方法

示例代码:

<?php
// 获取网站根目录的物理路径
$root_path = DEDEROOT;
echo $root_path;
// 输出结果类似:/home/wwwroot/your_website/
?>

使用 PHP 内置常量 __ROOT__

DedeCMS 在初始化时会定义一个魔术常量 __ROOT__,它等同于 DEDEROOT,效果完全一样。

示例代码:

dede 获取当前路径
(图片来源网络,侵删)
<?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 调用,可以使用以下方法。

dede 获取当前路径
(图片来源网络,侵删)

在 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 的模板引擎自身提供了一些变量来获取当前环境的路径信息。

获取当前栏目链接

使用 {dede:field name='typeurl'/}

示例代码 (模板文件):

<a href="{dede:field name='typeurl'/}">返回本栏目</a>

这个标签会自动解析为当前栏目所在的 URL。

获取当前文档链接

使用 {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'/}">

核心要点:

  1. 服务器路径:用 DEDEROOT,这是 DedeCMS 的标准。
  2. 浏览器 URL:用 $_SERVER,这是 PHP 的标准。
  3. 模板内链接:用 DedeCMS 自带标签,这是模板引擎的标准。

希望这份详细的解答能帮助你解决问题!

-- 展开阅读全文 --
头像
C语言字符串如何转十六进制?
« 上一篇 今天
显示枚举值,如何实现具体数值展示?
下一篇 » 今天

相关文章

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