dede typelink如何实现调用与自定义?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 DEDE建站 正文

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

dede typelink
(图片来源网络,侵删)

这个标签的核心功能是:通过栏目的 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'}
    &gt; <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} 循环调用一个层级的栏目 栏目的链接和名称 ,可以指定 typeidtype(顶级/当前级/下级)等来灵活控制调用范围
{dede:arclist} 调用文章列表 文章的链接、标题、摘要等 ,主要用于内容列表,而非栏目导航

简单总结:

  • 如果你知道具体的栏目 ID,并且只想得到这一个栏目的链接,用 typelink
  • 如果你想循环输出一组栏目(比如所有顶级栏目、某个栏目的所有子栏目),用 channel

注意事项

  1. 栏目 ID:确保 id 属性的值是正确的,错误的 ID 会导致标签无法正常工作,页面可能不会报错,但也不会显示任何内容。
  2. 栏目类型typelink 对所有类型的栏目(外部链接、内部栏目等)都有效,如果栏目是“外部链接”,它会输出你在外部链接地址中填写的 URL,而不是系统生成的路径。
  3. 性能typelink 是一个系统级标签,在模板中少量使用对性能影响不大,但如果在一个循环(如 {dede:arclist})内部反复调用 typelink,可能会产生不必要的数据库查询,影响页面加载速度,此时应考虑使用 PHP 代码进行优化。

希望这份详细的解析能帮助你完全掌握 DedeCMS 的 typelink

-- 展开阅读全文 --
头像
c语言 switch 循环
« 上一篇 今天
dede sessions
下一篇 » 今天

相关文章

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