织梦field typeid怎么用?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 织梦建站 正文

核心概念:[field:typeid /] 是什么?

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

织梦 field typeid
(图片来源网络,侵删)
  • typeid: 字段名,代表“栏目ID”(Type ID)。
  • field: 织梦标签前缀,表示这是一个字段的值。

页面里,[field:typeid /] 都会输出这篇内容所属栏目的数字ID。


主要用途和应用场景

理解了它的基本含义后,我们来看它最强大的几个用途。

实现栏目高亮/当前栏目样式

这是 typeid 最常见的用途,尤其在导航栏和侧边栏中,你可以通过判断当前栏目的ID,来给对应的栏目链接添加一个特殊的CSS类(activecurrent),从而实现高亮显示。

示例场景: 制作一个主导航,当用户在“公司新闻”栏目下时,该导航项需要高亮。

织梦 field typeid
(图片来源网络,侵删)

代码示例 (在 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>

代码解析:

  1. {dede:channel type='top' row='8'}: 这是一个循环标签,用于获取网站的所有顶级栏目。
  2. [field:typeid runphp='yes']: 这是关键!我们对 typeid 字段使用了 runphp='yes' 属性,这意味着我们可以在这里执行PHP代码。
  3. $refObj->Fields['typeid']: 这是织梦模板中的一个神奇变量。$refObj 指向的是当前正在被显示的文档(比如列表页中的某篇文章,或者文章页本身)。$refObj->Fields['typeid'] 就是获取这篇文档所属的栏目ID。
  4. if(@me == $refObj->Fields['typeid']): 我们将循环中当前栏目的ID(@me,代表当前字段的值)与当前文档的栏目ID进行比较。
  5. 如果两者相等,说明用户就在这个栏目下,我们就输出一个 <span class="current"></span> 标签,你可以在CSS中定义 .current 的样式(比如背景色、下划线等)。
  6. 如果不相等,就输出空字符串。

最终效果就是,当用户在“公司新闻”栏目时,<a> 标签后面会多一个带样式的 <span>,从而实现高亮。


作为其他标签的属性值

typeid 的值不仅可以显示,还可以作为其他标签的参数,实现更复杂的数据调用。

织梦 field 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。

常见问题与注意事项

  1. typeidtypeid2 的区别

    • [field:typeid /]: 返回内容所属的主栏目ID。
    • [field:typeid2 /]: 返回内容所属的副栏目ID(如果设置了的话),如果一个内容同时属于两个栏目,主栏目ID在 typeid,副栏目ID在 typeid2
  2. 在首页使用

    • 在网站的首页(index.htm)上,[field:typeid /] 是没有意义的,因为首页不属于任何一个内容栏目,它的值通常是空或者 0
  3. {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 /] 的用法,是迈向织梦模板高手的关键一步,它连接了“内容”和“栏目”,是实现模板逻辑和动态交互的基础。

-- 展开阅读全文 --
头像
dede killer下载2025存在吗?安全吗?能用吗?
« 上一篇 2025-12-17
dede伪静态htaccess规则怎么配置?
下一篇 » 2025-12-17

相关文章

取消
微信二维码
支付宝二维码

目录[+]