下面我将为你详细解释如何获取这个 ID,并提供不同场景下的代码示例和最佳实践。
核心方法:使用 $aid 全局变量
DedeCMS 在处理文章页面时,会从 URL 中获取 aid (Article ID) 参数,并将其自动存入一个全局变量 $aid 中。在绝大多数情况下,你只需要直接使用这个变量即可。
页模板 (article_article.htm) 中获取
这是最简单的情况,因为 $aid 变量已经在模板文件的全局作用域中了。
操作步骤:
- 打开你的文章内容页模板文件,通常位于
/templets/你的默认模板风格/article_article.htm。 - 在你需要使用 ID 的地方,直接使用
{dede:field.aid/}标签或者直接使用 PHP 代码<?php echo $aid; ?>。
示例代码 (article_article.htm):

<!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。
操作步骤:

- 创建一个新的 PHP 文件,
/plus/my_article.php。 - 使用
isset()函数检查 ID 是否存在,这是一种良好的编程习惯,可以避免因用户访问错误 URL 而导致的警告或错误。 - 获取 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 注入攻击。

错误示范:
// !!! 危险!不要这样做 !!!
$aid = $_GET['aid'];
$sql = "SELECT * FROM `#@__archives` WHERE id = $aid";
$dsql->Execute('me',$sql);
正确示范:
-
使用类型转换(最简单): 如上面的 PHP 示例所示,使用
(int)或(integer)将 ID 强制转换为整数,如果传入的不是数字(如' OR 1=1 --),它会被转换成0,从而避免注入。$aid = (int)$_GET['aid'];
-
使用 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!
