使用 {dede:channel} 标签(最常用)
{dede:channel} 是专门用于调用栏目标签的,获取 ID 是其基本功能。
场景1:获取当前栏目的 ID
在当前栏目页(如列表页 list_article*.php 或内容页 article*.php),可以直接使用 typeid 变量来获取当前栏目的 ID。
示例代码:
当前栏目的 ID 是:{dede:field name='typeid'/}
或者使用全局变量 $GLOBALS['typeid']:
当前栏目的 ID 是:{$GLOBALS['typeid']}
场景2:获取指定栏目的 ID
如果你想在模板中调用一个固定栏目的信息,并获取其 ID,可以在 {dede:channel} 标签中使用 typeid 属性指定栏目。
示例代码:
指定栏目 ID 为 1 的栏目信息:
栏目ID:{dede:channel typeid='1' type='self'}[field:id/]{/dede:channel}
栏目名称:{dede:channel typeid='1' type='self'}[field:typename/]{/dede:channel}
typeid='1':指定要调用的栏目 ID。type='self':表示只调用顶级栏目,如果指定的是子栏目,则调用其本身,通常为了确保准确,加上这个属性比较好。[field:id/]:输出该栏目的 ID。
场景3:循环获取所有栏目的 ID
如果你想遍历所有栏目(或指定层级的栏目),并在循环中获取每个栏目的 ID。
示例代码:
所有顶级栏目及其ID:
<ul>
{dede:channel type='top'}
<li>
栏目ID: [field:id/] - 栏目名称: [field:typename/]
</li>
{/dede:channel}
</ul>
所有一级栏目(包括顶级和其直接子栏目)及其ID:
<ul>
{dede:channel type='son' noself='yes'}
<li>
栏目ID: [field:id/] - 栏目名称: [field:typename/]
</li>
{/dede:channel}
</ul>
type='top':只调用顶级栏目。type='son':调用顶级栏目的所有直接子栏目。type='self':调用指定栏目及其所有子栏目。[field:id/]:在循环中,它会依次输出每个栏目的 ID。
使用 {dede:arclist} 标签(在文章列表中获取栏目ID)
当你使用 {dede:arclist} 调用文章列表时,也可以获取到文章所属栏目的 ID。
示例代码:
{dede:arclist titlelen='30' row='5'}
- 文章标题:[field:title/]
- 所属栏目ID:[field:typeid/]
- 所属栏目名:[field:typename/]
{/dede:arclist}
[field:typeid/]:输出当前文章所属栏目的 ID。[field:typename/]:输出当前文章所属栏目的名称。
使用 PHP 代码(在自定义函数或模板中)
如果你需要在 PHP 代码块中获取栏目 ID,比如在 include 文件或自定义的 PHP 模板文件中,可以直接使用 DedeCMS 的全局变量。
示例代码:
<?php
// 1. 获取当前栏目的 ID
$currentTypeId = $GLOBALS['typeid'];
echo "当前栏目ID是: " . $currentTypeId;
// 2. 获取指定栏目的信息(需要引入栏目缓存)
require_once(DEDEINC."/arc.partview.class.php");
$channel = new PartView();
$channel->SetTypeid(1); // 设置你要查询的栏目ID
$channel->dsql->SetQuery("SELECT * FROM `#@__arctype` WHERE id = 1");
$rs = $channel->dsql->GetOne();
if($rs){
$specifiedTypeId = $rs['id'];
$specifiedTypeName = $rs['typename'];
echo "<br>指定栏目ID是: " . $specifiedTypeId;
echo "<br>指定栏目名是: " . $specifiedTypeName;
}
?>
$GLOBALS['typeid']:这是 DedeCMS 中存储当前栏目 ID 的全局变量,非常方便。#@__arctype:这是 DedeCMS 数据库中存储栏目的表名,#@__会在运行时被替换为数据库前缀。
总结与推荐
| 场景 | 推荐方法 | 示例 |
|---|---|---|
| 获取当前栏目页的 ID | 使用 {dede:field name='typeid'} 或 {$GLOBALS['typeid']} |
{dede:field name='typeid'/} |
| 调用一个固定栏目并获取其 ID | 使用 {dede:channel typeid='N'} |
{dede:channel typeid='1'}[field:id]{/dede:channel} |
| 循环所有栏目并获取每个 ID | 使用 {dede:channel} 循环标签 |
{dede:channel type='top'}[field:id]{/dede:channel} |
| 在文章列表中获取栏目 ID | 使用 {dede:arclist} 中的 [field:typeid/] |
[field:typeid/] |
| 在 PHP 代码中获取 ID | 使用 $GLOBALS['typeid'] 或数据库查询 |
$id = $GLOBALS['typeid']; |
对于绝大多数模板制作需求,方法一 中的 {dede:channel} 和 {dede:field} 标签已经足够强大和方便。
