typelink 是 DedeCMS 中一个非常重要且常用的系统标签,它的主要作用是获取并输出一个指定栏目(栏目类型)的链接。

这个标签的核心功能是:通过栏目的 ID,自动生成该栏目的完整 URL(包括协议、域名、目录和栏目路径),并将其作为变量供模板使用,这在制作面包屑导航、当前位置、下拉菜单等场景中非常有用。
基本语法
typelink 标签有两种常见的使用方式:单标签和双标签。
单标签形式 (直接输出)
这种方式最简单,直接输出指定栏目的链接。
{dede:typelink id='栏目ID'/}
id:必需属性,指定要获取链接的栏目的 ID,你可以在 DedeCMS 后台“栏目管理”中查看每个栏目的 ID。
示例:
假设栏目 ID 为 2 的栏目是“公司简介”,其链接为 https://www.yourdomain.com/about/gongsijianjie/。
<a href="{dede:typelink id='2'/}">公司简介</a>
浏览器解析后,会生成:
<a href="https://www.yourdomain.com/about/gongsijianjie/">公司简介</a>
双标签形式 (获取链接并赋值给变量)
这种方式更灵活,它不直接输出链接,而是将链接信息存储在一个变量中,供你在标签内部使用。
{dede:typelink id='栏目ID'}
<!-- 在这里可以使用变量 -->
<a href='[field:link/]'>[field:typename/]</a>
{/dede:typelink}
在双标签内部,可以使用两个核心变量:
[field:link/]:存储栏目的完整 URL,这是typelink标签最主要的功能。[field:typename/]:存储栏目的名称,这是一个附加功能,方便直接调用栏目名。
示例: 同样以栏目 ID 为 2 的“公司简介”为例。
{dede:typelink id='2'}
<a href='[field:link/]'>[field:typename/]</a>
{/dede:typelink}
解析结果与单标签形式完全相同:
<a href="https://www.yourdomain.com/about/gongsijianjie/">公司简介</a>
应用场景
typelink 标签在实际模板开发中应用非常广泛。
场景 1:面包屑导航 / 当前位置
这是最经典的应用,面包屑需要显示从首页到当前页面的所有上级栏目链接。
{dede:field name='position'/}
{dede:field name='position'} 这个标签底层就是通过循环调用 typelink 来生成面包屑路径的,如果你想自定义面包屑的样式,通常需要手动循环调用顶级栏目。
场景 2:自定义面包屑(手动循环)
如果你想完全控制面包屑的样式和分隔符,可以这样写:
<a href="{dede:global.cfg_basehost/}">首页</a>
{dede:field name='typelink'}
> <a href='[field:link/]'>[field:typename/]</a>
{/dede:field}
{dede:global.cfg_basehost/}:获取网站根目录 URL,用于链接到首页。{dede:field name='typelink'}:获取当前栏目的完整路径链接,它会自动循环输出所有上级栏目。
场景 3:栏目下拉菜单
当你的顶级栏目有多个子栏目时,需要输出每个子栏目的链接。
<ul class="sub-nav">
{dede:channel type='son' typeid='1'}
<li>
<a href="{dede:typelink id='[field:id]/'}">
[field:typename/]
</a>
</li>
{/dede:channel}
</ul>
{dede:channel type='son' typeid='1'}:获取 ID 为 1 的栏目的所有子栏目。- 在循环内部,我们使用
{dede:typelink id='[field:id]/'}来为每一个子栏目动态生成链接。
场景 4:在列表页或内容页调用上级栏目链接
你可能想在文章页或列表页获取当前栏目直接上级的链接。
<!-- 假设当前栏目ID通过 {dede:field name='typeid'}/ 获取 -->
{dede:typelink id='~typeid'}
<a href="[field:link/]">返回上级栏目:[field:typename/]</a>
{/dede:typelink}
注意:这里使用了
~typeid这种写法,在某些旧版本或特定配置下可能有效,但更推荐使用 PHP 代码或{dede:geturl}等更灵活的方式来实现此功能。typelink主要还是用于已知固定 ID 的场景。
与相关标签的区别
初学者容易混淆 typelink 和其他栏目调用标签,这里做一个简单对比:
| 主要用途 | 灵活性 | ||
|---|---|---|---|
{dede:typelink} |
获取单个栏目的链接 | 栏目的完整 URL 或链接+名称 | 低,需指定 id,主要用于已知 ID 的场景 |
{dede:channel} |
循环调用一个层级的栏目 | 栏目的链接和名称 | 高,可以指定 typeid、type(顶级/当前级/下级)等来灵活控制调用范围 |
{dede:arclist} |
调用文章列表 | 文章的链接、标题、摘要等 | 高,主要用于内容列表,而非栏目导航 |
简单总结:
- 如果你知道具体的栏目 ID,并且只想得到这一个栏目的链接,用
typelink。 - 如果你想循环输出一组栏目(比如所有顶级栏目、某个栏目的所有子栏目),用
channel。
注意事项
- 栏目 ID:确保
id属性的值是正确的,错误的 ID 会导致标签无法正常工作,页面可能不会报错,但也不会显示任何内容。 - 栏目类型:
typelink对所有类型的栏目(外部链接、内部栏目等)都有效,如果栏目是“外部链接”,它会输出你在外部链接地址中填写的 URL,而不是系统生成的路径。 - 性能:
typelink是一个系统级标签,在模板中少量使用对性能影响不大,但如果在一个循环(如{dede:arclist})内部反复调用typelink,可能会产生不必要的数据库查询,影响页面加载速度,此时应考虑使用 PHP 代码进行优化。
希望这份详细的解析能帮助你完全掌握 DedeCMS 的 typelink
