{dede:field} 和 {dede:type}
调用栏目名称主要依赖两个核心标签,它们的使用场景略有不同:

{dede:field}:主要用于在内容页(article_article.htm)或列表页(article_list.htm)中,调用当前栏目或当前文章所属栏目的信息。{dede:type}:主要用于在首页(index.htm)或其他列表页中,通过指定栏目ID来调用任意栏目的信息。
页(文章详情页)调用栏目名称
这是最简单的情况,因为内容页本身就属于某个栏目,可以直接调用当前栏目的信息。
方法1:使用 {dede:field} (最推荐)
页模板文件 article_article.htm 中,直接使用以下代码:
{dede:field name='typename'/}
name='typename':表示获取当前栏目的名称。- 这是最简洁、最高效的方式。
方法2:使用 {dede:type} (同样可用)
你也可以使用 {dede:type} 标签,它会获取当前文章所在栏目的信息。

{dede:type}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}
[field:typename/]:获取栏目名称。[field:typelink/]:获取栏目链接。- 这种方式的好处是,你可以在标签内部同时获取栏目的名称、链接、ID等多种信息。
在列表页(文章列表页)调用栏目名称
列表页(如 article_list.htm)显示的是某个栏目下的所有文章,所以调用当前栏目名称的方法与内容页完全相同。
方法1:使用 {dede:field} (最推荐)
在列表页模板文件 article_list.htm 中,直接使用:
{dede:field name='typename'/}
这会显示当前列表页所对应的那个栏目的名称。

方法2:使用 {dede:type} (同样可用)
{dede:type}
[field:typename/]
{/dede:type}
在首页或自定义页面调用指定栏目的名称
这是最灵活的情况,比如你想在首页显示“公司简介”这个栏目的名称,你需要知道这个栏目的ID。
步骤1:找到栏目ID
- 登录DedeCMS后台。
- 进入【栏目管理】。
- 找到你想要调用的栏目(公司简介”),将鼠标悬停在该栏目名称的“修改”链接上。
- 浏览器左下角会显示链接地址,类似
dede/typedit.php?tid=2,其中的tid=2中的2就是这个栏目的ID。
步骤2:在首页模板中使用 {dede:type}
在首页模板文件 index.htm 中,使用 {dede:type} 标签并填入你找到的栏目ID。
{dede:type typeid='2'}
<h2>[field:typename/]</h2>
<a href="[field:typelink/]">查看更多</a>
{/dede:type}
typeid='2':这是关键!typeid属性用于指定你要调用的栏目的ID,请将2替换为你自己的栏目ID。[field:typename/]:输出栏目名称。[field:typelink/]:输出栏目的链接地址。
调用当前顶级栏目名称
一个栏目下面还有子栏目(二级、三级栏目),你可能想在子栏目页调用它“上一级”栏目的名称。
这需要使用 {dede:field} 和PHP结合的方式。
{dede:field name='typename' function='GetTopTypename(@me)'/}
function='GetTopTypename(@me)':这是关键。@me:代表{dede:field}标签本身的原始值(即当前栏目的名称)。GetTopTypename():这是一个自定义的PHP函数,它会传入当前栏目的名称,然后返回其顶级栏目的名称。
重要提示: GetTopTypename() 这个函数默认可能不存在于你的系统中,你需要将它添加到DedeCMS的核心函数文件中。
如何添加 GetTopTypename 函数:
- 打开你的DedeCMS安装目录下的
/include/common.func.php文件。 - 在文件末尾的
?>之前,添加以下PHP代码:
/**
* 获取当前栏目的顶级栏目名称
* @param string $typename 当前栏目名称
* @return string 顶级栏目名称
*/
function GetTopTypename($typename)
{
global $dsql;
$typeid = $dsql->GetOne("SELECT id FROM `dede_arctype` WHERE typename = '$typename'");
$topid = GetTopid($typeid['id']);
$topType = $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id = '$topid'");
return $topType['typename'];
}
/**
* 获取指定栏目的顶级栏目ID
* @param int $typeid 当前栏目ID
* @return int 顶级栏目ID
*/
function GetTopid($typeid)
{
global $dsql;
$row = $dsql->GetOne("SELECT reid FROM `dede_arctype` WHERE id = '$typeid'");
if ($row['reid'] == 0) {
return $typeid;
} else {
return GetTopid($row['reid']);
}
}
添加完这两个函数后,保存文件,之后你就可以在任何模板中正常使用 {dede:field name='typename' function='GetTopTypename(@me)'/} 了。
| 调用场景 | 推荐代码 | 说明 |
| :--- | :--- | :--- |页/列表页 (调用当前栏目) | {dede:field name='typename'/} | 最常用、最简单,直接获取当前栏目的名称。 |
| 首页/自定义页 (调用指定栏目) | {dede:type typeid='1'}[field:typename/]{/dede:type} | 需要知道栏目的 ID (typeid='1')。 |
| 子栏目页** (调用顶级栏目) | {dede:field name='typename' function='GetTopTypename(@me)'/} | 需要额外在 common.func.php 中添加PHP函数。 |
希望这份详细的指南能帮助你解决在DedeCMS中调用栏目名称的问题!
