dede如何调用父栏目链接?

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

核心标签

实现这个功能主要依赖于两个核心的 DedeCMS 标签:

dede调用父栏目链接
(图片来源网络,侵删)
  1. {dede:field name='typeid' /}: 获取当前栏目的 ID
  2. {dede:gettopid}: 这是一个功能强大的单标签,它会获取当前栏目(或文章)所在顶级栏目的 ID,在大多数情况下,我们需要的是直接父栏目,而不是顶级栏目,所以这个标签的直接使用场景较少,但理解它很重要。

使用 {dede:channel} 标签(最推荐、最灵活)

这是最常用且最灵活的方法,因为它不仅可以获取父栏目链接,还可以获取父栏目的名称、描述等其他信息。

原理

通过 typeid 属性指定父栏目的 ID,然后使用 type='top' 来确保只获取一个栏目信息。

示例代码

假设你想在子栏目页的页眉或页脚显示一个返回父栏目的链接。

<a href="{dede:field name='typeid' function="GetTopid(@me,0)"/}">返回上级栏目</a>

代码解析:

dede调用父栏目链接
(图片来源网络,侵删)
  1. {dede:field name='typeid' /}: 先获取当前栏目的 ID。
  2. function="GetTopid(@me,0)": 这是关键,这是一个函数调用。
    • @me: 代表前面 {dede:field name='typeid' /} 获取到的值(即当前栏目ID)。
    • GetTopid(): 这是 DedeCMS 的一个内置函数,用于根据当前栏目ID获取其父栏目ID。
    • 0: GetTopid() 函数的第二个参数,0 表示获取直接父级栏目,1 表示获取顶级栏目,我们这里需要直接父级,所以用 0
  3. 整个 {dede:field name='typeid' function="GetTopid(@me,0)"} 的最终输出结果就是父栏目的ID
  4. <a href="...">: 将这个ID构造成一个标准的链接。

进阶示例:同时显示父栏目名称

{dede:channel typeid='{dede:field name='typeid' function="GetTopid(@me,0)"}' type='top'}
    <a href="[field:typelink/]">返回[field:typename/]</a>
{/dede:channel}

代码解析:

  • {dede:channel ...}: 标签开始。
  • typeid='{dede:field name='typeid' function="GetTopid(@me,0)"}': 将我们刚刚获取到的父栏目ID作为 typeid 参数传递给 channel
  • type='top': 确保该标签只匹配这一个ID的栏目,避免循环或输出多个结果。
  • [field:typelink/]: 输出该栏目的完整链接。
  • [field:typename/]: 输出该栏目的名称。
  • {dede:channel ...}: 标签结束。

这种方法结构清晰,可扩展性强,是处理此类问题的首选。


使用 {dede:field} 标签的 parentid 属性(简洁)

如果你的需求仅仅是获取父栏目的ID,并且不打算获取其他信息,这个方法更简洁。

dede调用父栏目链接
(图片来源网络,侵删)

原理

直接调用当前栏目的 parentid (父栏目ID) 字段。

示例代码

<a href="{dede:field name='parentid' runphp='yes'}">$id = @me; $row = GetOneType($id); @me = $row['typedir'];{/dede:field}">返回上级栏目</a>

代码解析:

  1. {dede:field name='parentid' /}: 这个可以直接输出父栏目的ID,但如果我们想直接得到链接,就需要 runphp
  2. runphp='yes': 启用PHP代码执行。
  3. $id = @me;: 将 {dede:field name='parentid'} 的值(即父栏目ID)赋给变量 $id
  4. $row = GetOneType($id);: 调用 DedeCMS 函数 GetOneType(),根据ID获取该栏目的完整信息,并存储在数组 $row 中。
  5. @me = $row['typedir'];: 从数组中取出栏目的目录地址(即链接路径),并重新赋值给 @me@me 是模板引擎中代表当前标签值的变量。
  6. 最终输出的就是父栏目的完整链接路径。

这种方法代码更紧凑,但可读性稍差,且不易扩展。


在列表页和内容页调用

在列表页 (list_article.htm) 和内容页 (article_article.htm) 调用父栏目链接,和方法一完全相同,因为 {dede:field name='typeid'} 在这两种页面中同样有效,它会获取当前所在的子栏目ID。

列表页示例 (list_article.htm)

<h2>当前位置:<a href="/">首页</a> > <a href="{dede:field name='typeid' function="GetTopid(@me,0)"}">{dede:field name='typename' function="GetTopid(@me,0)"/}</a></h2>

注意:这里的 function="GetTopid(@me,0)" 用于获取父栏目的ID,然后我们再用 {dede:type} 标签来获取其名称和链接,上面的写法是简化的,更严谨的写法参考方法一的进阶示例。 页示例 (article_article.htm) 页,你可能需要一个“返回上级栏目”的按钮。

<p><a href="{dede:field name='typeid' function="GetTopid(@me,0)"/}">返回上级栏目</a></p>

或者使用更严谨的 {dede:channel}

{dede:channel typeid='{dede:field name='typeid' function="GetTopid(@me,0)"}' type='top'}
    <p><a href="[field:typelink/]">返回[field:typename/]</a></p>
{/dede:channel}

总结与对比

方法 优点 缺点 推荐场景
{dede:channel} 最灵活,可获取名称、链接等多种信息;结构清晰,易于维护和扩展。 代码稍长,需要嵌套标签。 绝大多数情况下的首选,尤其是在需要显示栏目名称时。
{dede:field}+runphp 代码简洁,直接在单标签内完成所有操作。 可读性差,不易扩展;如果DedeCMS内核函数变更,可能有风险。 只需要父栏目链接,且追求代码极致简洁的场景。
通用 通用性强,适用于列表页、内容页。 需要理解不同页面下 {dede:field name='typeid'} 的含义。 所有需要调用父栏目信息的页面。

最终建议:

为了代码的健壮性和未来的可维护性,强烈推荐使用 方法一 ({dede:channel},它虽然代码量稍多,但逻辑清晰,功能强大,是 DedeCMS 模板开发中的最佳实践。

-- 展开阅读全文 --
头像
织梦会员发布信息为何显示空白?
« 上一篇 今天
dede伪静态为何无法采集?
下一篇 » 今天

相关文章

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