使用 GetTopid() 函数(最推荐、最标准)
这是DedeCMS官方推荐的方法,专门用于获取当前顶级栏目ID,在列表页模板中,当前栏目ID通常存储在全局变量 typeid 中,但顶级栏目ID需要通过函数来获取。

(图片来源网络,侵删)
使用场景:
- 在列表页 (
list_article*.php) 的模板文件中。 - 当你需要调用顶级栏目的名称、关键词、描述等信息时。
代码示例:
在您的列表页模板文件(/templets/default/list_article.htm)中,直接使用:
{dede:field name='typeid' function='GetTopid(@me)'/}
代码解析:

(图片来源网络,侵删)
{dede:field name='typeid'}:这部分会获取当前栏目的ID,并将其值存入@me这个临时变量中,如果在“子栏目A”下,@me的值就是“子栏目A”的ID。function='GetTopid(@me)':这部分对@me的值(即当前栏目ID)执行GetTopid()函数,该函数会根据当前栏目ID,向上查找其顶级父栏目,并返回顶级栏目的ID。
更常见的用法(获取顶级栏目信息):
您通常不是直接输出ID,而是用它来获取顶级栏目的其他信息,比如顶级栏目的名称:
当前顶级栏目ID是:<strong>{dede:field name='typeid' function='GetTopid(@me)'/}</strong><br>
当前顶级栏目名称是:<strong>{dede:field name='typeid' function='GetTopid(@me)'/}</strong>
注意: 上面第二行代码是错误的,
{dede:field}标签不能直接这样嵌套,正确的做法是使用channel标签来调用栏目信息。
正确获取顶级栏目名称的示例:

(图片来源网络,侵删)
{dede:channel type='top' current='0'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
或者,如果你想明确获取当前顶级栏目ID对应的名称:
{dede:global name='typeid' function='GetTopid(@me)'/}
然后将这个ID用在 channel 标签中。
直接使用全局变量 $typeid
在某些情况下,您可能只需要当前栏目的ID,而不是顶级ID,这个ID可以直接通过PHP全局变量 $typeid 获取。
使用场景:
- 在列表页模板中。
- 当您只需要当前栏目的ID,不涉及上级或顶级栏目时。
代码示例:
在列表页模板中,您可以通过 {dede:global} 标签来输出这个PHP变量:
当前栏目ID是:<strong>{dede:global name='typeid'/}</strong>
代码解析:
{dede:global name='typeid'}:这个标签会直接输出PHP全局变量$typeid的值,在列表页中,$typeid自动被赋值为当前栏目的ID。
注意事项:
- 这个方法获取的是当前栏目的ID,如果当前页面是顶级栏目,那么它和顶级ID相同,如果是子栏目,那么它就是子栏目的ID。
- 这个方法不适用于首页、文章页等其他页面,只在列表页有效。
在PHP文件中直接获取(适用于二次开发)
如果您是在列表页的PHP文件(list_article.php)中进行二次开发,而不是在模板文件里,那么您可以直接使用PHP代码来获取。
使用场景:
- 修改
list_article.php或其他相关PHP文件。 - 在PHP逻辑代码中需要用到当前栏目ID。
代码示例:
在 list_article.php 文件中,您可以直接这样使用:
<?php // 获取当前栏目ID $currentTypeId = $typeid; // 获取当前顶级栏目ID $topTypeId = GetTopid($typeid); // 现在您可以在PHP代码中使用这两个变量了 echo "当前栏目ID: " . $currentTypeId; echo "<br>"; echo "顶级栏目ID: " . $topTypeId; // ... 其他PHP逻辑 ?>
总结与对比
| 方法 | 适用场景 | 优点 | 缺点 | |
|---|---|---|---|---|
GetTopid() |
当前顶级栏目ID | 列表页模板,需要调用顶级栏目信息时 | 最标准、最可靠,符合DedeCMS的设计逻辑 | 获取的是顶级ID,不是当前ID |
$typeid |
当前栏目ID | 列表页模板,只需要当前ID时 | 简单直接,无需调用函数 | 不适用于获取上级栏目信息 |
| PHP变量 | 当前或顶级栏目ID | PHP文件中进行二次开发时 | 灵活,可在PHP逻辑中直接使用 | 不适用于模板文件,需要修改PHP源码 |
实践建议:
- 在列表页模板中,如果需要显示顶级栏目的名称、关键词等信息,请务必使用
{dede:field name='typeid' function='GetTopid(@me)'/}结合channel - 如果只是简单地判断一下当前是哪个栏目,或者传递给JS等,使用
{dede:global name='typeid'/}即可。 - 不要在模板中直接写PHP代码(如
<?php echo $typeid; ?>),这不是DedeCMS的标准用法,可能导致模板引擎解析错误。
