使用 GetTopTypename() 函数(最推荐)
这是最常用、最简洁且最灵活的方法,无论是顶级栏目还是二级栏目,都可以使用。

(图片来源网络,侵删)
语法
{dede:field name='typeid' function="GetTopTypename(@me)"/}
或者
<?php echo GetTopTypename($typeid); ?>
参数说明
@me:这是DedeCMS模板中的特殊变量,代表当前标签的值。{dede:field name='typeid'}获取当前栏目的ID,@me就代表这个ID值。GetTopTypename():这是DedeCMS的核心PHP函数,它的作用是根据栏目ID获取其顶级栏目的名称,即使你传入的是一个二级栏目的ID,它也能正确返回其顶级父栏目的名称。
使用场景和示例
场景1:在列表页或内容页调用当前栏目的顶级栏目名称
假设你在列表页(list_article.htm页(article_article.htm)中,想显示当前栏目所属的顶级栏目名称。
<h2>您当前所在的位置:<a href="/">首页</a> > <span>[field:typename/]</span></h2>
<p>该栏目属于顶级分类:<strong>{dede:field name='typeid' function="GetTopTypename(@me)"/}</strong></p>
场景2:在任意位置调用一个已知ID的栏目名称

(图片来源网络,侵删)
假设你想在首页的某个固定位置,显示ID为 5 的栏目的名称。
<div class="hot-category">
<h3>热门分类:<strong>{dede:field name='5' function="GetTopTypename(@me)"/}</strong></h3>
</div>
或者使用PHP代码方式(更灵活,可以结合其他逻辑):
<div class="hot-category">
<h3>热门分类:</h3>
<?php
$target_id = 5; // 指定要查询的栏目ID
$top_typename = GetTopTypename($target_id);
echo "<strong>" . $top_typename . "</strong>";
?>
</div>
使用SQL查询(功能最强大)
当你不仅需要栏目名称,还需要其他栏目信息(如链接、简介等)时,直接执行SQL查询是最佳选择。
语法
{dede:sql sql="SELECT * FROM `dede_arctype` WHERE id = 指定的ID"}
<a href="[field:typedir/]">[field:typename/]</a>
{/dede:sql}
或者使用PHP代码方式:
<?php
$target_id = 5; // 指定要查询的栏目ID
$query = "SELECT typename, typedir FROM `dede_arctype` WHERE id = $target_id";
$row = $dsql->GetOne($query);
if(is_array($row)){
echo "<a href='".$row['typedir']."'>".$row['typename']."</a>";
}
?>
参数说明
dede:sql:DedeCMS的SQL查询标签。dede_arctype:DedeCMS中存储栏目信息的核心数据表,前缀dede_可能因你的安装而异,请自行确认。id = 指定的ID:查询条件,id是栏目ID字段。typename:栏目名称字段。typedir:栏目链接字段。
使用场景
这个方法非常强大,你想调用ID为 5 的栏目,并显示它的名称和链接:
{dede:sql sql="SELECT typename, typedir FROM `dede_arctype` WHERE id = 5"}
<a href="[field:typedir/]" title="查看[field:typename/]">[field:typename/]</a>
{/dede:sql}
使用 GetOneType() 函数(获取单栏完整信息)
如果你需要获取一个栏目的详细信息(不仅仅是名称),这个函数很方便。
语法
<?php
$target_id = 5; // 指定要查询的栏目ID
$typeinfo = GetOneType($target_id);
// $typeinfo 是一个包含了该栏目所有信息的数组
echo $typeinfo['typename']; // 输出栏目名称
echo $typeinfo['typedir']; // 输出栏目链接
?>
使用场景
当你需要在一个复杂的逻辑块中处理多个栏目信息时,这个方法可以一次性获取所有数据,避免多次查询。
总结与对比
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
GetTopTypename() |
代码最简洁,直接返回名称,无需关心SQL | 只能获取名称,无法获取其他信息 | 绝大多数场景,特别是只需要栏目名称时。 |
| SQL查询 | 功能最强大,可获取任意字段(名称、链接、描述等) | 代码稍长,需要了解表结构 | 当需要获取栏目名称以外的信息时,如制作栏目导航块。 |
GetOneType() |
可获取单个栏目的完整信息数组 | 需要通过PHP代码访问数组元素,不如标签直观 | 在PHP代码块中,需要对单个栏目进行复杂操作时。 |
重要提示:关于栏目ID和顶级栏目
- 顶级栏目:指没有父栏目的栏目,其
topid字段为0。 GetTopTypename()的特殊性:即使你传入一个二级栏目(如ID为10)的ID,GetTopTypename(10)返回的也是它顶级父栏目(如ID为5)的名称,如果你只想获取ID为10的栏目本身的名称,请使用方法二(SQL查询)。
要获取ID为 10 的栏目本身的名称:
{dede:sql sql="SELECT typename FROM `dede_arctype` WHERE id = 10"}
[field:typename/]
{/dede:sql}
