核心概念:[field:typeid /] 是什么?
[field:typeid /] 是一个字段标签,它通常用在织梦的列表页(list_*.htm)、文章页(article_*.htm)或自定义模型页面中,用于获取当前内容记录所属的栏目ID。

- typeid: 字段名,代表“栏目ID”(Type ID)。
- field: 织梦标签前缀,表示这是一个字段的值。
页面里,[field:typeid /] 都会输出这篇内容所属栏目的数字ID。
主要用途和应用场景
理解了它的基本含义后,我们来看它最强大的几个用途。
实现栏目高亮/当前栏目样式
这是 typeid 最常见的用途,尤其在导航栏和侧边栏中,你可以通过判断当前栏目的ID,来给对应的栏目链接添加一个特殊的CSS类(active 或 current),从而实现高亮显示。
示例场景: 制作一个主导航,当用户在“公司新闻”栏目下时,该导航项需要高亮。

代码示例 (在 head.htm 或其他模板文件中):
<ul id="nav">
<li><a href="{dede:global.cfg_basehost/}/">首页</a></li>
<!-- 调用顶级栏目 -->
{dede:channel type='top' row='8'}
<li>
<a href="[field:typelink/]">[field:typename/]</a>
<!-- 判断当前栏目的ID是否等于循环中的栏目ID -->
[field:typeid runphp='yes']
if(@me == $refObj->Fields['typeid']) {
@me = '<span class="current"></span>';
} else {
@me = '';
}
[/field:typeid]
</li>
{/dede:channel}
</ul>
代码解析:
{dede:channel type='top' row='8'}: 这是一个循环标签,用于获取网站的所有顶级栏目。[field:typeid runphp='yes']: 这是关键!我们对typeid字段使用了runphp='yes'属性,这意味着我们可以在这里执行PHP代码。$refObj->Fields['typeid']: 这是织梦模板中的一个神奇变量。$refObj指向的是当前正在被显示的文档(比如列表页中的某篇文章,或者文章页本身)。$refObj->Fields['typeid']就是获取这篇文档所属的栏目ID。if(@me == $refObj->Fields['typeid']): 我们将循环中当前栏目的ID(@me,代表当前字段的值)与当前文档的栏目ID进行比较。- 如果两者相等,说明用户就在这个栏目下,我们就输出一个
<span class="current"></span>标签,你可以在CSS中定义.current的样式(比如背景色、下划线等)。 - 如果不相等,就输出空字符串。
最终效果就是,当用户在“公司新闻”栏目时,<a> 标签后面会多一个带样式的 <span>,从而实现高亮。
作为其他标签的属性值
typeid 的值不仅可以显示,还可以作为其他标签的参数,实现更复杂的数据调用。

示例场景: 在文章页(article_*.htm)中,除了显示当前文章,还想显示该栏目下的“相关文章”。
代码示例 (在 article_article.htm 中):
<h1>[field:title/]</h1>
<p>[field:body/]</p>
<hr>
<h2>相关文章</h2>
<ul>
<!--
调用同栏目下的文章
typeid='[field:typeid/]' 将当前文章的栏目ID作为参数传递给arclist标签
-->
{dede:arclist
titlelen='30'
row='5'
typeid='[field:typeid/]'
orderby='pubdate'
}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
</ul>
代码解析:
{dede:arclist ...}: 这是织梦最强大的文章列表调用标签。typeid='[field:typeid/]': 我们将typeid标签的输出结果(即当前文章的栏目ID)直接作为arclist标签的typeid属性值。- 这样,
arclist就只会调用与当前文章在同一个栏目下的其他文章,实现了“相关文章”的功能。
在自定义模型中调用关联栏目
如果你的网站使用了自定义模型(比如产品模型、下载模型等),并且模型中有一个字段是“关联栏目”(通常是单选按钮或下拉菜单,存储的是栏目ID),那么在详情页中,[field:typeid /] 仍然返回的是该内容所属的主栏目ID。
如果你需要获取自定义字段中关联的栏目ID,你需要使用 [field:你的自定义字段名 /]。
示例:
假设你有一个自定义字段 guanlan,存储了关联栏目的ID。
在列表页或详情页中:
[field:typeid /]-> 内容的主栏目ID。[field:guanlan /]-> 内容的自定义字段“关联栏目”的ID。
常见问题与注意事项
-
typeid和typeid2的区别[field:typeid /]: 返回内容所属的主栏目ID。[field:typeid2 /]: 返回内容所属的副栏目ID(如果设置了的话),如果一个内容同时属于两个栏目,主栏目ID在typeid,副栏目ID在typeid2。
-
在首页使用
- 在网站的首页(
index.htm)上,[field:typeid /]是没有意义的,因为首页不属于任何一个内容栏目,它的值通常是空或者0。
- 在网站的首页(
-
与
{dede:gettype}标签的区别{dede:gettype}是一个循环标签,用于获取指定ID的栏目的详细信息(如栏目名称、链接等),它需要一个typeid属性来指定你要查询哪个栏目。[field:typeid /]是一个字段标签,用于获取当前内容记录的栏目ID,它不需要属性。- 简单说:
gettype是“根据ID查栏目”,field:typeid是“取出当前内容的ID”。
| 特性 | 描述 |
|---|---|
| 名称 | [field:typeid /] |
| 类型 | 字段标签 |
| 作用域 | 列表页、文章页、自定义模型页等所有内容页面 |
| 功能 | 获取当前内容记录所属的主栏目ID |
| 核心用法 | 条件判断:用于高亮当前栏目(runphp='yes')。参数传递:作为 arclist 等标签的 typeid 属性值,实现精准数据调用。 |
| 相关标签 | [field:typeid2 /] (副栏目ID), {dede:channel} (调用栏目), {dede:gettype} (获取单个栏目信息) |
掌握 [field:typeid /] 的用法,是迈向织梦模板高手的关键一步,它连接了“内容”和“栏目”,是实现模板逻辑和动态交互的基础。
