在模板文件中使用
这是最常见的情况,你需要在*.htm模板文件中获取当前栏目的ID。

使用全局变量 $typeid (最常用)
在DedeCMS的模板引擎中,当一个栏目页被解析时,系统会自动定义一个全局变量 $typeid,其值就是当前栏目的ID。
适用场景:
- 在栏目列表页 (
list_*.htm) - 页 (
article_*.htm或自定义模型页面)
示例:
假设你想要在栏目页的某个位置显示当前栏目的ID,你可以直接这样写:

<p>当前栏目的ID是:{dede:field.id/}</p>
<!-- 或者直接使用PHP变量(不推荐在模板中过多使用PHP,但可行) -->
<p>当前栏目的ID是:<?php echo $typeid; ?></p>
最佳实践:使用 {dede:field.id/} 是最标准和推荐的方式,它更符合DedeCMS的模板标签规范。
通过 channel 标签获取
如果你需要从一个标签(如首页、导航栏)中获取某个特定栏目的ID,可以使用 适用场景: 示例: 假设你知道栏目的ID是 如果你不知道ID,但知道栏目ID路径(顶级栏目ID为2,其下级栏目ID为5,路径为 当你需要修改PHP核心文件或编写自定义插件/函数时,就需要在PHP代码层面获取栏目ID。 与模板变量类似,在PHP代码中,当前栏目的ID通常存储在全局数组 适用场景: 示例: 在 如果你不知道当前页面的栏目ID,但知道栏目的其他信息(如名称、英文别名等),你可以通过查询 适用场景: 示例: 假设你想获取栏目名称为“产品中心”的ID。 这是一种最底层的方法,适用于数据迁移、脚本处理等与DedeCMS程序逻辑解耦的场景。 适用场景: 示例: 你需要连接到你的MySQL数据库,然后执行SQL查询。 希望这份详细的指南能帮助你快速解决在DedeCMS中获取栏目ID的问题!{dede:channel}
1,想获取它的名称和ID:
{dede:channel typeid='1' type='self'}
<p>
栏目ID:[field:id/] <br>
栏目名称:[field:typename/]
</p>
{/dede:channel}
2,5),可以这样获取:{dede:channel typeid='5' type='son'}
<p>
栏目ID:[field:id/] <br>
栏目名称:[field:typename/]
</p>
{/dede:channel}
在PHP文件/自定义函数中获取
使用全局对象
$GLOBALS['typeid']$GLOBALS 中。
include/ 目录下的核心文件。arc.archives.class.php (文章内容页类) 或 arc.list.class.php (列表页类) 中,你可以直接使用:// 获取当前栏目的ID
$channelId = $GLOBALS['typeid'];
// 现在你可以使用这个 $channelId 变量了
echo "当前栏目ID是: " . $channelId;
使用
GetOne 或 GetArray 查询数据库 (当已知其他信息时)dede_arctype 表来获取。
// 引入数据库连接文件 (如果尚未引入)
// require_once(dirname(__FILE__)."/../include/common.inc.php");
// 使用 DedeCMS 的全局数据库对象 $dsql
$dsql = new DedeSql(false);
// 执行查询
$row = $dsql->GetOne("SELECT id FROM `dede_arctype` WHERE typename='产品中心'");
// 检查查询结果
if(is_array($row)) {
$channelId = $row['id'];
echo "找到'产品中心',其ID是: " . $channelId;
} else {
echo "未找到名称为'产品中心'的栏目。";
}
// 或者使用预处理语句,更安全
$dsql->SetQuery("SELECT id FROM `dede_arctype` WHERE typename = :typename");
$dsql->BindParam("typename", "产品中心");
$dsql->Execute();
$row = $dsql->GetArray();
if($row) {
$channelId = $row['id'];
echo "找到'产品中心',其ID是: " . $channelId;
}
直接查询数据库
-- 查询所有栏目及其ID
SELECT id, typename, reid FROM `dede_arctype`;
-- 查询特定ID的栏目信息
SELECT * FROM `dede_arctype` WHERE id = 10;
-- 根据栏目名称查询ID
SELECT id FROM `dede_arctype` WHERE typename = '新闻资讯';
总结与推荐
场景
推荐方法
示例
在模板文件中显示当前栏目ID
全局变量
{dede:field.id/}{dede:field.id/}
在PHP核心文件中获取当前栏目ID
全局对象
$GLOBALS['typeid']$typeid = $GLOBALS['typeid'];
在PHP中根据名称获取栏目ID
查询
dede_arctype 表$dsql->GetOne("SELECT id FROM dede_arctype WHERE typename='xxx'");
在模板中获取指定栏目ID
{dede:channel}{dede:channel typeid='1'}[field:id]{/dede:channel}
直接从数据库获取
执行SQL查询
SELECT id FROM dede_arctype WHERE ...;
