dede子栏目调用文件怎么用?

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

在 DedeCMS 中,调用子栏目主要通过模板文件中的 来实现,最核心的标签是 {dede:channel},根据不同的需求,这个标签有多种使用方式。

dede子栏目调用文件
(图片来源网络,侵删)

核心标签:{dede:channel}

{dede:channel} 是一个功能非常强大的标签,主要用于获取栏目列表,通过设置不同的属性,可以实现各种调用效果。

常用调用场景及代码示例

调用当前栏目的所有直接子栏目(最常用)

这是最常见的用法,比如在网站的侧边栏或者某个大栏目的首页,列出它下面的所有一级子栏目。

代码示例:

{dede:channel type='son' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a></li>"}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}

代码详解:

dede子栏目调用文件
(图片来源网络,侵删)
  • {dede:channel type='son' ...}:

    • type='son':这是关键属性,表示“调用当前栏目的直接子栏目”,如果你想在首页调用所有顶级栏目,可以使用 type='top'
  • currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a></li>":

    • currentstyle:用于设置“当前栏目”的样式,当用户正在浏览某个子栏目时,这个子栏目会应用 currentstyle 中定义的HTML结构。
    • ~typelink~~typename~currentstyle 中的特殊变量,分别代表子栏目的链接和名称。
    • class='thisclass':你可以自定义一个CSS类名,用来给当前栏目添加高亮样式。
  • <li><a href="[field:typelink/]">[field:typename/]</a></li>:

    • 这是默认的循环体模板,用于显示非当前状态的子栏目。
    • [field:typelink/]:子栏目的链接地址。
    • [field:typename/]:子栏目的名称。

调用指定栏目的子栏目

有时你可能想在某个页面调用一个特定父栏目的子栏目,而不是当前栏目的子栏目。

dede子栏目调用文件
(图片来源网络,侵删)

代码示例:

{dede:channel typeid='2' type='son'}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}

代码详解:

  • typeid='2':
    • 这个属性指定了要调用的父栏目的 ID,上面的代码会调用栏目ID为2的所有直接子栏目。
    • 你需要先在 DedeCMS 后台的【栏目管理】中找到你想要调用的父栏目,并记下其ID。

调用当前栏目的所有后代栏目(包括子栏目、孙栏目等)

如果你需要展示一个层级的所有栏目,而不是只有一级子栏目。

代码示例:

<ul>
{dede:channel type='sun' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a></li>"}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>

代码详解:

  • type='sun'
    • sun 表示调用“子孙栏目”,即当前栏目下的所有层级的子栏目。

注意: 这种调用方式返回的是一个扁平化的列表,不会自动生成层级缩进,如果需要显示层级关系,需要配合 reid(父栏目ID)等字段在CSS中自己控制样式,或者使用更复杂的嵌套循环。


调用顶级栏目

通常用于网站主导航或者页脚的友情链接区域。

代码示例:

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

代码详解:

  • type='top'
    • top 表示调用所有顶级栏目(即没有父栏目的栏目)。

高级用法与技巧

控制栏目数量

使用 row 属性来限制显示的栏目数量。

{dede:channel type='son' row='5'}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
  • row='5':只显示5个子栏目。

排除某个栏目

使用 notypeid 属性来排除不需要显示的栏目。

{dede:channel type='son' notypeid='10,12'}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
  • notypeid='10,12':不显示ID为10和12的子栏目。

调用子栏目的文章数量

如果想在显示子栏目名称的同时,也显示该栏目下的文章数量,可以使用 arclen 属性(注意:此属性在旧版本中可能需要开启或使用其他方法)。

一个更通用的方法是利用 {dede:field} 标签获取当前栏目的文章数,但这不适用于循环,对于循环中的子栏目文章数,一个简单的方法是调用 getarccount 函数。

{dede:channel type='son'}
    <li>
        <a href="[field:typelink/]">[field:typename/]</a>
        <span>([field:ID function="GetArcCount(@me)"/])</span>
    </li>
{/dede:channel}

代码详解:

  • [field:ID function="GetArcCount(@me)"/]:
    • [field:ID] 获取当前子栏目的ID。
    • function="GetArcCount(@me)" 调用 DedeCMS 的 GetArcCount 函数,并将子栏目ID作为参数传入,从而获取该栏目下的文章数量。
    • 注意GetArcCount 函数会增加数据库查询次数,如果子栏目很多,可能会对网站性能产生轻微影响。

调用指定层级的栏目

如果你只想调用某个特定层级的栏目(只调用三级栏目),可以使用 channel 标签的 nativelevel 属性组合,但这比较复杂,一个更简单的方法是先获取父栏目ID,然后调用其子栏目。

总结与文件位置

需求 核心标签 关键属性
调用当前栏目的直接子栏目 {dede:channel} type='son'
调用指定栏目的子栏目 {dede:channel} typeid='父栏目ID'
调用当前栏目的所有子孙栏目 {dede:channel} type='sun'
调用所有顶级栏目 {dede:channel} type='top'

模板文件存放位置:

这些标签代码通常写在 DedeCMS 的模板文件中,路径为:

/templets/你的模板文件夹名/

  • 首页模板:/templets/default/index.htm
  • 列表页模板:/templets/default/list_article.htm
  • 文章页模板:/templets/default/article_article.htm
  • 其他自定义页面模板:/templets/default/xxx.htm

你只需要用文本编辑器(如 Dreamweaver、VS Code、Notepad++ 等)打开对应的模板文件,在需要显示子栏目的位置粘贴上述代码即可,修改完成后,记得在后台【生成】->【更新HTML】来更新页面。

-- 展开阅读全文 --
头像
C语言如何高效找出100-200间的素数?
« 上一篇 03-08
main函数返回值到底该怎么用?
下一篇 » 03-08

相关文章

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

目录[+]