dede如何调用当前顶级栏目名称?

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

在列表页(list_article.htm页(article_article.htm)调用

这是最常见的需求,因为在这类页面,我们知道自己属于哪个栏目,并且需要向上追溯其顶级栏目。

dede 调用当前顶级栏目名称 标签
(图片来源网络,侵删)

推荐方法:使用 GetTopid 函数

这是最灵活、最可靠的方法,它不依赖于栏目的固定层级(比如不一定是二级栏目),可以正确处理三级、四级栏目等任意层级嵌套。

标签写法:

{dede:field name='typeid' function="GetTopid(@me)"/}

代码解析:

  1. {dede:field name='typeid'}: 这个标签用于获取当前页面所在栏目的 ID,如果当前文章在 ID 为 25 的栏目下,这个标签会输出 25
  2. function="GetTopid(@me)": 这是关键部分,它对 typeid 的值(即 25)执行一个名为 GetTopid 的 PHP 函数。
  3. GetTopid() 函数的作用是:根据一个栏目 ID,向上递归查询,直到找到顶级栏目,然后返回这个顶级栏目的 ID
  4. 注意:这个标签默认输出的是 顶级栏目的 ID,而不是名称,如果你需要直接获取名称,可以结合 type 标签一起使用。

获取顶级栏目名称(基于 GetTopid

如果你需要直接输出顶级栏目的 名称 而不是 ID,你需要将两个标签结合使用。

dede 调用当前顶级栏目名称 标签
(图片来源网络,侵删)

标签写法:

{dede:channel type='top' currentid=''} 
<a href="[field:typelink/]">[field:typename/]</a> 
{/dede:channel}

上面的写法是错误的! currentid 属性在这里无法正确接收 GetTopid 函数的返回值,正确的做法是使用一个更直接或通过变量传递的方法。

正确且简洁的写法(推荐):

{dede:field name='typeid' function="getTopTypename(@me)"/}

代码解析:

  1. 这种写法需要一个自定义的函数 getTopTypename,你需要在 DedeCMS 的核心文件中添加这个函数,或者使用更巧妙的方式。
  2. 一个更简单且无需修改核心文件的方法是使用一个嵌套的 channel 标签,并利用其 currentid 属性。

使用嵌套 channel 标签(推荐,无需修改文件)

这是最推荐的方法,因为它完全在模板文件内实现,安全且易于理解。

标签写法:

{dede:channel type='top' currentid='{dede:field.name='typeid'/}'}
    [field:typename/]
{/dede:channel}

代码解析:

  1. {dede:channel type='top' ...}: channel 标签用于调用栏目。type='top' 的作用是只调用 所有顶级栏目
  2. currentid='{dede:field.name='typeid'/}': 这是这个方法的精髓。
    • 内层的 {dede:field.name='typeid'/} 会先执行,获取当前栏目的 ID。
    • 这个 ID 会被作为 currentid 的值传递给外层的 channel
    • channel 标签在遍历所有顶级栏目时,会检查哪个栏目的 ID 等于 currentidcurrent 这个栏目就会带上 current 样式或属性。
  3. [field:typename/]: 在 channel 标签内部,[field:typename/] 会输出当前循环到的栏目的名称,因为 currentid 的作用,它最终只会输出与当前页面所属顶级栏目匹配的那个名称。

列表页/内容页):

  • 获取顶级栏目 ID: {dede:field name='typeid' function="GetTopid(@me)"/}
  • 获取顶级栏目名称(最佳实践):
    {dede:channel type='top' currentid='{dede:field.name='typeid'/}'}
        [field:typename/]
    {/dede:channel}

在首页(index.htm)调用

首页不属于任何一个具体栏目,所以不能直接调用,但如果你想在首页显示某个特定顶级栏目的名称,你需要指定那个栏目的 ID。

标签写法:

{dede:channel type='top' row='1' typeid='1'}
    [field:typename/]
{/dede:channel}

代码解析:

  • type='top': 同样,只调用顶级栏目。
  • typeid='1': 关键属性,这里指定了你要调用的顶级栏目的 ID,将 '1' 替换成你想要显示的顶级栏目的实际 ID。
  • row='1': 表示只调用一条记录(即你指定的那个栏目)。

在自定义页面(如 page_about.htm)调用

自定义页面通常不关联任何栏目,如果需要调用,你需要在后台的“自定义页面”管理中,为该页面指定一个关联栏目。

  1. 在后台设置: 进入“后台” -> “维护” -> “自定义管理”,找到你需要编辑的页面,点击“编辑”。 在页面内容下方,有一个“关联栏目”选项,选择一个顶级栏目,然后更新。

  2. 在模板中使用标签: 设置好关联栏目后,你就可以使用和列表页/内容页完全相同的标签来调用了。

标签写法(与场景一相同):

{dede:channel type='top' currentid='{dede:field.name='typeid'/}'}
    [field:typename/]
{/dede:channel}

总结与对比

场景 推荐标签 说明
列表页 / 内容页 {dede:channel type='top' currentid='{dede:field.name='typeid'/}'}[field:typename/]{/dede:channel}` 最通用、最推荐,能处理任意层级的栏目嵌套,直接输出名称。
列表页 / 内容页 {dede:field name='typeid' function="GetTopid(@me)"/} 输出顶级栏目的 ID,如果需要名称,需进一步处理。
首页 {dede:channel type='top' typeid='1'}[field:typename/]{/dede:channel}| 需要手动指定typeid` 来调用指定的顶级栏目。
自定义页面 {dede:channel type='top' currentid='{dede:field.name='typeid'/}'}[field:typename/]{/dede:channel}` 需要先在后台为页面设置“关联栏目”。

希望这个详细的解释能帮助你解决问题!在实际使用中,场景一中的嵌套 channel 标签方法 是最常用和最可靠的。

-- 展开阅读全文 --
头像
dede tag路径如何改为拼音?
« 上一篇 昨天
Caesar cipher C语言如何实现加密解密?
下一篇 » 昨天

相关文章

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