当前 ID 是什么?
“当前 ID” 的含义取决于你所在的页面:

- 在栏目列表页 (如
plus/list.php或栏目自定义列表模板):当前 ID 是指该栏目本身的 ID,你在“产品介绍”栏目下,那么当前 ID 产品介绍”这个栏目的 ID。 - 页 (如
article_article.htm):当前 ID 通常指当前文章的 ID,但如果你想在文章页获取它所属栏目的 ID,则需要使用特定的调用标签。 - 在首页或其他静态页面:没有“当前栏目”的概念,因此直接获取
typeid是没有意义的,通常会返回 0 或空。
使用系统内置标签(推荐,最简单)
这是在 DedeCMS 模板中获取 ID 最直接、最常用的方法。
获取当前栏目的 ID (typeid)
这个标签主要用于栏目列表页,获取当前正在被浏览的栏目的 ID。
标签代码:
{dede:field name='typeid'/}
使用场景示例: 假设你想在列表页的标题旁边显示当前栏目的 ID,可以这样写:

<h2>当前栏目ID: {dede:field.name='typeid'/} 的文章列表</h2>
<ul>
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>文章ID: [field:id/]</span>
</li>
{/dede:list}
</ul>
获取当前文章的 ID (id)
这个标签主要用于页,获取当前正在被阅读的文章的 ID。
标签代码:
{dede:field name='id'/}
使用场景示例:页,你想显示这篇文章的 ID:
<h1>[field:title/]</h1>
<p>文章ID: {dede:field.name='id'/}</p>
<p>发布时间: {dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}</p>
<div>
[field:body/]
</div>
使用 PHP 代码(灵活,适用于复杂逻辑)
如果你需要在模板文件(.php 文件)中进行更复杂的判断和处理,可以直接使用 PHP 代码来获取 ID。
在 PHP 文件中获取当前栏目 ID
DedeCMS 的很多页面都是通过 PHP 文件动态生成的,在这些文件中,你可以通过全局变量 $typeid 来获取。
适用文件:
plus/list.php(列表页)category.php(栏目首页)- 以及其他一些自定义的 PHP 页面
示例代码 (以 plus/list.php 为例):
<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 获取当前栏目ID
$currentTypeId = $typeid;
// 现在你就可以在PHP中使用这个变量了
if ($currentTypeId > 0) {
// 查询这个栏目的名称
$query = "SELECT typename FROM `#@__arctype` WHERE id = $currentTypeId";
$typeRow = $dsql->GetOne($query);
$typeName = $typeRow['typename'];
echo "<h2>您正在浏览栏目: " . $typeName . " (ID: " . $currentTypeId . ")</h2>";
}
// ... 后续的列表查询逻辑 ...
$ctag = DedeTagObj::getInstance();
$ctag->SetRefObj('list');
$ctag->SetSource($tid);
$tid = $ctag->GetAtt('typeid');
if ($tid == 0) $tid = $currentTypeId;
// 调用列表
$arcs = GetList($typeid, $tid, 'hot', $PageSize, $isdefault, $ismake, $orderby, $innertext, $tablewidth, $arcid);
// ... 省略后续代码 ...
?>
在 PHP 文件中获取当前文章 ID
这个主要用在文章内容页的 PHP 文件中,view.php。
适用文件:
view.php(文章内容页)
示例代码 (在 view.php 中):
<?php
require_once(dirname(__FILE__)."/include/common.inc.php");
require_once(DEDEINC."/arc.archives.class.php");
// 获取当前文章ID
$aid = (isset($aid) && is_numeric($aid)) ? $aid : 0;
if ($aid == 0) {
ShowMsg('文档ID不存在!', '-1');
exit();
}
// 创建一个文章类的对象
$arc = new Archives($aid);
// 现在你可以通过对象获取文章的各种信息
$arcTitle = $arc->Fields['title'];
$arcTypeId = $arc->Fields['typeid']; // 获取文章所属的栏目ID
$arcPubDate = $arc->Fields['pubdate'];
echo "<h1>文章标题: " . $arcTitle . "</h1>";
echo "<p>文章ID: " . $aid . "</p>";
echo "<p>所属栏目ID: " . $arcTypeId . "</p>";
?>
重要区别:如何在文章页获取所属栏目的 ID?
这是一个非常高频的需求,在文章内容页,{dede:field.name='typeid'} 获取的是文章本身的 ID,而我们通常想要的是它属于哪个栏目。
这时,你需要使用 channel 标签的 type 属性。
标签代码:
{dede:field name='typeid' function="GetTopTypename(@me)"/}
或者更精确地获取ID:
{dede:field name='typeid' function="get_channelid(@me)"/}
但更直接和推荐的方法是使用 arclist 或 channelartlist 标签来获取。
最实用的方法:使用 channelartlist
如果你想在文章页调用当前栏目的信息(比如名称、ID等),最好的方式是使用 示例模板代码 ( 注意: 希望这个详细的解释能帮助你完全理解在 DedeCMS 中如何操作当前 ID!channelartlist
article_article.htm):{dede:channelartlist typeid='{dede:field.name=typeid/}'}
<h2>当前栏目ID: {dede:field.id/}</h2>
<h3>当前栏目名称: {dede:field.typename/}</h3>
<!-- 这里是文章内容 -->
<div>
<h1>{dede:field.title/}</h1>
<div>{dede:field.body/}</div>
</div>
{/dede:channelartlist}
{dede:field.name=typeid/} 在这里的作用是告诉 channelartlist 标签,要获取的文章所属的栏目 ID 是多少。{dede:field.id/} 才是真正获取到的栏目 ID。
总结与最佳实践
场景
需求
推荐方法
代码示例
栏目列表页
获取当前栏目的 ID
使用系统标签
{dede:field.name='typeid'/}
页
获取当前文章的 ID
使用系统标签
{dede:field.name='id'/}
页
获取文章所属栏目的 ID
使用
channelartlist{dede:channelartlist...}{dede:field.id/}{/dede:channelartlist}
PHP 文件中
获取当前栏目 ID
使用全局变量
$typeid
PHP 文件中
获取当前文章 ID
使用全局变量
$aid
PHP 文件中
获取文章所属栏目 ID
通过文章类对象
$arc->Fields['typeid']
