使用全局变量 $artid (最推荐、最直接)
这是在 DedeCMS 模板文件(如 article_article.htm)中获取当前文章 ID 的最常用、最简单的方法。
适用场景:
- 页模板 (
article_article.htm) 中。 - 在文章列表页或相关文章等需要调用当前文章信息的页面。
代码示例:
在您的模板文件(article_article.htm)的任意位置,直接使用以下代码即可输出当前文章的 ID。
当前文章ID是:{dede:field.id/}
或者,如果您想在 PHP 代码块中使用,可以直接调用全局变量 $artid。
在模板中直接使用变量:
当前文章ID是:<?php echo $artid; ?>
为什么 $artid 是最好的选择?
因为当用户访问一个文章页面时(https://www.yoursite.com/a/123/456.html),DedeCMS 的系统会自动解析 URL,将文章 ID 456 赋值给全局变量 $artid,这个变量在文章内容页的整个生命周期内都是可用的,效率最高。
使用 GetArc() 函数 (适用于标签中)
如果您想在自定义的 DedeCMS 标签({dede:mytag})或者需要获取文章详细信息的场景下使用,GetArc() 函数是一个强大的工具。
适用场景:
- 在自定义标签中。
- 当您不仅需要 ID,还需要文章的其他信息(如标题、发布时间等)时。
代码示例:
在自定义标签文件中(/include/taglib/mytag.lib.php),您可以通过文章别名或 ID 来获取文章信息。
// 假设我们已经通过某种方式知道了当前文章的ID,$artid
$arcRow = GetArc($artid);
if($arcRow){
echo "文章ID: " . $arcRow['id'];
echo "<br>";
echo "文章标题: " . $arcRow['title'];
echo "<br>";
echo "文章发布时间: " . $arcRow['pubdate'];
}
GetArc() 函数会返回一个包含文章所有字段(如 id, title, typeid, pubdate 等)的数组。
在 PHP 文件中获取 (适用于开发)
如果您是在 PHP 文件(例如一个自定义的插件或页面)中获取当前文章 ID,而不是在模板里,您可以通过 global 关键字来调用全局变量。
适用场景:
- 开发 DedeCMS 插件或功能模块。
- 在
index.php或其他需要判断当前页面类型的 PHP 文件中。
代码示例:
<?php
// 引入DedeCMS的公共文件
require_once (dirname(__FILE__) . "/include/common.inc.php");
// 声明使用全局变量
global $artid;
// 检查是否在文章页面
if($artid > 0){
echo "当前在文章页面,文章ID是: " . $artid;
// 您也可以在这里使用 $dsql 查询更多信息
$row = $dsql->GetOne("SELECT title FROM `#@__archives` WHERE id = $artid");
if($row){
echo "<br>文章标题是: " . $row['title'];
}
} else {
echo "当前不在文章页面。";
}
?>
总结与对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
{dede:field.id/} |
页模板 | 最简单、最直接、官方推荐 | 仅限在模板文件中使用 |
$artid 变量 |
页模板、PHP代码 | 效率高、无需查询数据库 | 仅限在文章页面有效,其他页面为空 |
GetArc() 函数 |
自定义标签、需要获取完整文章信息 | 功能强大,可获取文章所有字段 | 需要一次数据库查询,效率低于直接用变量 |
global $artid |
PHP文件开发 | 在PHP逻辑层获取ID,灵活性高 | 需要手动引入文件和声明全局变量 |
常见问题排查
问题: 为什么我用了 {dede:field.id/} 或 $artid,输出是空的?
原因和解决方法:
- 模板文件错误: 您可能不在文章内容页模板 (
article_article.htm) 中,请确保您编辑的是正确的模板文件。 - URL 重写问题: 如果您使用了伪静态(URL重写),确保您的服务器配置正确,DedeCMS 的后台设置(“系统” -> “系统基本参数” -> “核心设置”中的“是否使用伪静态”)已经开启,DedeCMS 正是通过解析伪静态 URL 来设置
$artid的。 - 自定义页面: 如果您在一个自定义的 PHP 页面中,并且该页面没有像 DedeCMS 的文章页那样初始化
$artid变量,那么它自然是空的,您需要手动获取 URL 参数并解析,如果您的 URL 是view.php?aid=123,您需要用$_GET['aid']来获取。
希望这份详细的解答能帮助您!在绝大多数情况下,直接使用 {dede:field.id/} 就能完美解决问题。
