dede如何获取文章传递的request id?

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

下面我将为你详细解释如何获取这个 ID,并提供不同场景下的代码示例和最佳实践。

核心方法:使用 $aid 全局变量

DedeCMS 在处理文章页面时,会从 URL 中获取 aid (Article ID) 参数,并将其自动存入一个全局变量 $aid 中。在绝大多数情况下,你只需要直接使用这个变量即可。


页模板 (article_article.htm) 中获取

这是最简单的情况,因为 $aid 变量已经在模板文件的全局作用域中了。

操作步骤:

  1. 打开你的文章内容页模板文件,通常位于 /templets/你的默认模板风格/article_article.htm
  2. 在你需要使用 ID 的地方,直接使用 {dede:field.aid/} 标签或者直接使用 PHP 代码 <?php echo $aid; ?>

示例代码 (article_article.htm):

dede如何获取文章传递的request id?

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
</head>
<body>
    <h1>{dede:field.title/}</h1>
    <!-- 方法一:使用 DedeCMS 自带标签(推荐) -->
    <p>当前文章的 ID 是:<strong>{dede:field.aid/}</strong></p>
    <!-- 方法二:直接使用 PHP 变量(灵活,可用于复杂逻辑) -->
    <p>通过 PHP 变量获取的 ID 是:<strong><?php echo $aid; ?></strong></p>
    <hr>
    <!-- 应用场景:根据当前文章 ID 获取相关信息 -->
    <p>相关文章链接:</p>
    <ul>
        {dede:likearticle col='2' row='5'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <!-- 这里的 [field:id/] 是循环中的文章ID,不是当前文章ID -->
        </li>
        {/dede:likearticle}
    </ul>
</body>
</html>

说明:

  • {dede:field.aid/} 是 DedeCMS 的标准标签,用于输出当前文章的 ID,这是最推荐的方式。
  • <?php echo $aid; ?> 适用于需要在模板中嵌入一些 PHP 逻辑判断的场景。

在自定义 PHP 文件中获取

如果你想创建一个自己的 PHP 文件(my_article.php)来处理文章,你需要手动从 $_GET$_REQUEST 超级全局变量中获取这个 ID。

操作步骤:

dede如何获取文章传递的request id?

  1. 创建一个新的 PHP 文件,/plus/my_article.php
  2. 使用 isset() 函数检查 ID 是否存在,这是一种良好的编程习惯,可以避免因用户访问错误 URL 而导致的警告或错误。
  3. 获取 ID 后,你可以用它来查询数据库、调用 DedeCMS 的类等。

示例代码 (my_article.php):

<?php
require_once(dirname(__FILE__)."/../include/config_global.php");
require_once(DEDEINC."/arc.archives.class.php");
// 1. 从 $_GET 或 $_REQUEST 中获取 ID
// $_REQUEST 同时包含 $_GET, $_POST, $_COOKIE
$aid = isset($_REQUEST['aid']) ? (int)$_REQUEST['aid'] : 0;
// 2. 检查 ID 是否有效
if ($aid <= 0) {
    // ID 无效,可以跳转到首页或显示错误页面
    header("Location: ".($cfg_basehost ? $cfg_basehost : '/'));
    exit();
}
// 3. 使用获取到的 ID
// 实例化一个文章类,获取文章内容
$arc = new Archives($aid);
// 获取文章标题
$arc_title = $arc->Fields['title'];
// 获取文章内容
$arc_content = $arc->Fields['body'];
// ... 其他逻辑 ...
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"><?php echo $arc_title; ?> - <?php echo $cfg_webname; ?></title>
</head>
<body>
    <h1><?php echo $arc_title; ?></h1>
    <p>这是通过自定义 PHP 文件(my_article.php)处理的文章。</p>
    <p>文章 ID 是:<strong><?php echo $aid; ?></strong></p>
    <div>
        <?php echo $arc_content; ?>
    </div>
</body>
</html>

代码解释:

  • isset($_REQUEST['aid']):检查 URL 中是否存在 aid 参数。
  • ? (int)$_REQUEST['aid'] : 0:如果存在,则将其转换为整数(这是一种安全措施,防止 SQL 注入);如果不存在,则赋值为 0。
  • new Archives($aid):这是 DedeCMS 的核心类,通过传入文章 ID 来获取文章的所有信息。
  • header("Location: ..."):ID 无效,重定向到首页,防止程序出错。

安全性最佳实践:防止 SQL 注入

直接将用户输入的 ID 拼接到 SQL 查询语句中是极其危险的,可能导致 SQL 注入攻击。

dede如何获取文章传递的request id?

错误示范:

// !!! 危险!不要这样做 !!!
$aid = $_GET['aid'];
$sql = "SELECT * FROM `#@__archives` WHERE id = $aid";
$dsql->Execute('me',$sql);

正确示范:

  1. 使用类型转换(最简单): 如上面的 PHP 示例所示,使用 (int)(integer) 将 ID 强制转换为整数,如果传入的不是数字(如 ' OR 1=1 --),它会被转换成 0,从而避免注入。

    $aid = (int)$_GET['aid'];
  2. 使用 DedeCMS 自带的 CheckIDS() 函数(更严谨): DedeCMS 提供了一个专门的函数来检查 ID 列表,确保它们是有效的、用逗号分隔的数字字符串。

    $aid = $_GET['aid'];
    // 检查 $aid 是否是一个或多个有效的ID,如 "123" 或 "123,456,789"
    if ($aid == '' || !preg_match("#^[0-9,]+$#", $aid)) {
        die('Request Error!');
    }
    // 现在的 $aid 可以安全地用于 IN 查询
    $sql = "SELECT * FROM `#@__archives` WHERE id IN ($aid)";
场景 推荐方法 代码示例
页模板 使用 DedeCMS 标签 {dede:field.aid/}
页模板 使用 PHP 全局变量 <?php echo $aid; ?>
自定义 PHP 文件 $_REQUEST 获取并转为整数 $aid = isset($_REQUEST['aid']) ? (int)$_REQUEST['aid'] : 0;
安全性 强烈建议进行类型转换或使用 CheckIDS() $aid = (int)$_GET['aid'];

希望这个详细的解释能帮助你完全理解在 DedeCMS 中如何获取文章 ID!

-- 展开阅读全文 --
头像
清华C语言课后答案哪里找?
« 上一篇 11-26
织梦DedeCMS如何添加图集模型选项?
下一篇 » 11-26

相关文章

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

目录[+]