页(文章详情页)获取当前文章ID
这是最简单直接的情况,在文章内容页(通常是 article_article.htm 或你自定义的文章模板),文章ID是全局变量。
方法:直接使用全局变量 $arcID
页模板中,DedeCMS已经将当前文章的ID存储在全局变量 $arcID 中,你可以在模板的任何地方直接使用它。
示例代码:
<p>当前文章的ID是:{dede:field.id/}</p>
<p>或者使用PHP代码获取:<?php echo $arcID; ?></p>
说明:
{dede:field.id/}是DedeCMS的标签,等同于$arcID。$arcID是一个PHP变量,如果你在模板中写PHP代码,可以直接使用它。
在文章列表页(频道页、栏目列表页)获取当前栏目ID
文章列表页(通常是 list_article.htm 或栏目模板)显示的是一个栏目下的所有文章,你需要获取的是当前栏目的ID,而不是文章的ID。
使用DedeCMS标签 {dede:field.typeid/}
这是最推荐的方法,专门用于获取当前栏目页的栏目ID。
示例代码:
<p>当前栏目的ID是:{dede:field.typeid/}</p>
使用PHP全局变量 $typeid
DedeCMS在栏目列表页也会将当前栏目ID存入PHP全局变量 $typeid。
示例代码:
<p>当前栏目的ID是:<?php echo $typeid; ?></p>
在自定义页面(单页面)获取当前页面ID
自定义页面(通常由“核心” -> “页面管理”创建,模板文件为 page_article.htm)的ID获取方式与文章内容页类似。
方法:使用DedeCMS标签 {dede:field.id/}
在自定义页面模板中,{dede:field.id/} 标签会输出当前自定义页面的ID。
示例代码:
<p>当前自定义页面的ID是:{dede:field.id/}</p>
在其他非模板文件中获取ID(如PHP脚本)
如果你想在DedeCMS的PHP文件(比如一个自定义的PHP插件或模块)中获取当前页面的ID,情况会复杂一些,因为你需要先判断当前是哪种页面类型。
核心思路: 调用DedeCMS的全局函数或类来判断页面类型并获取ID。
示例代码:
<?php
require_once(dirname(__FILE__) . "/include/common.inc.php"); // 引入核心文件
// 判断当前页面类型并获取ID
if (isset($arcID) && $arcID > 0) {
// 场景一:在文章内容页
$current_id = $arcID;
$page_type = 'article';
echo "当前是文章内容页,ID是: " . $current_id;
} elseif (isset($typeid) && $typeid > 0) {
// 场景二:在栏目列表页
$current_id = $typeid;
$page_type = 'category';
echo "当前是栏目列表页,栏目ID是: " . $current_id;
} elseif (isset($aid) && $aid > 0) {
// 有时文章ID也可能在 $aid 变量中,特别是在某些特定操作或API调用时
$current_id = $aid;
$page_type = 'article';
echo "通过变量 \$aid 获取到文章ID: " . $current_id;
} else {
// 其他情况,如首页、自定义页面等,需要更复杂的判断
// 判断是否为首页
if ($GLOBALS['cfg_phpurl'] == 'home') {
$page_type = 'home';
echo "当前是首页";
} else {
// 可以尝试获取自定义页面ID
// 这通常需要从URL参数或特定变量中解析,比较复杂
// 如果URL是 /page/123.html,可能需要从 $_SERVER['REQUEST_URI'] 中解析
echo "无法直接确定当前页面ID,或为首页/其他页面。";
}
}
?>
总结与速查表
| 页面类型 | 模板文件 | 获取ID的Dede标签 | 获取ID的PHP变量 | 备注 |
|---|---|---|---|---|
| 页 | article_article.htm |
{dede:field.id/} |
$arcID |
最常用、最简单 |
| 栏目列表页 | list_*.htm |
{dede:field.typeid/} |
$typeid |
获取的是栏目ID |
| 自定义页面 | page_article.htm |
{dede:field.id/} |
$arcID |
与文章页类似 |
| 首页 | index.htm |
无 | 无 | 首页没有ID概念 |
| PHP脚本 | - | 需手动判断 | $arcID, $typeid, $aid |
需引入核心文件并判断页面类型 |
重要提示
- 变量作用域:
$arcID和$typeid等变量是在DedeCMS解析模板的过程中由系统自动定义的,它们只在模板文件或被模板系统加载的文件中有效,直接在独立的PHP文件中可能无法直接获取,需要先引入include/common.inc.php并模拟页面请求。 - 性能考虑:在模板中直接使用
{dede:field.id/}或{$arcID}是最高效的方式,因为这是DedeCMS原生支持的,性能损耗最小。 - URL分析:对于非常规页面(如按ID查询的动态页面),你可能需要通过分析
$_SERVER['REQUEST_URI']或$_GET参数来手动提取ID,但这不属于DedeCMS的标准模板范畴。
希望这份详细的总结能帮助你解决在DedeCMS中获取ID的各种问题!
