dede导航如何调用子栏目?

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

核心标签:{dede:channel}

调用子栏目的核心标签是 {dede:channel},它是一个功能非常强大的循环标签,专门用于获取栏目列表。

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

基础用法

最基本的用法是获取当前栏目的所有一级子栏目。

{dede:channel type='son' currentstyle='active'}
    <a href='[field:typelink/]'>[field:typename/]</a>
{/dede:channel}

标签参数解释:

  • type='son': 这是最关键的参数,它指定了获取的栏目类型为“子栏目”。
    • son: 获取当前栏目的子栏目。
    • self: 获取当前栏目本身。
    • top: 获取顶级栏目。
    • sun: 获取所有子孙栏目(递归)。
  • currentstyle='active': 用于设置当前所在子栏目的样式,当用户访问的页面是这个子栏目时,<a> 标签会被替换为 currentstyle 指定的内容。currentstyle='<li class="active"><a href="[field:typelink/]">[field:typename/]</a></li>'

字段说明 ([field:xxx/]):

  • [field:typelink/]: 子栏目的链接地址。
  • [field:typename/]: 子栏目的名称。
  • [field:id/]: 子栏目的 ID。
  • [field:seotitle/]: 子栏目的 SEO 标题。
  • [field:litpic/]: 子栏目的缩略图。

在当前栏目页调用其子栏目

这是最常见的场景,比如在“新闻中心”页面,下方列出“公司新闻”、“行业动态”、“技术分享”等子栏目。

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

模板代码:

假设你的栏目页模板文件是 list_article.htm

<div class="sub-category">
    <h3>子栏目列表</h3>
    <ul>
        {dede:channel type='son' row='8'}
            <li>
                <a href="[field:typelink/]">[field:typename/]</a>
            </li>
        {/dede:channel}
    </ul>
</div>

代码解释:

  1. {dede:channel type='son'}: 告诉 DedeCMS,获取当前页面对应栏目的所有子栏目。
  2. row='8': (可选) 限制只显示 8 个子栏目。
  3. 循环体内的 <li><a>...</a></li> 就是每个子栏目的 HTML 结构。
  4. [field:typelink/][field:typename/] 分别被替换为子栏目的链接和名称。

在首页调用指定顶级栏目的子栏目

有时我们想在首页的某个位置,产品展示”区域,直接调用“产品展示”这个顶级栏目下的所有子栏目(如“产品A”、“产品B”)。

这需要用到 typeid 参数来指定栏目 ID。

操作步骤:

  1. 找到栏目ID:进入 DedeCMS 后台 -> “栏目” -> “栏目管理”,找到你想要调用的顶级栏目(如“产品展示”),记下它的 ID(假设为 5)。
  2. 在首页模板中使用 typeid

模板代码:

<div class="product-category">
    <h3>我们的产品</h3>
    <ul>
        {dede:channel type='son' typeid='5' row='10'}
            <li>
                <a href="[field:typelink/]">[field:typename/]</a>
            </li>
        {dede:channel}
    </ul>
</div>

代码解释:

  • typeid='5': 关键参数,明确指定了要获取 ID 为 5 的栏目的子栏目,如果没有这个参数,type='son' 默认会获取当前栏目(首页没有栏目概念,所以可能为空)的子栏目。
  • row='10': (可选) 限制显示 10 个子栏目。

调用当前栏目的所有子孙栏目(递归)

如果你的栏目结构很深,产品” -> “系列A” -> “型号1”,你想在“产品”页面同时列出“系列A”、“系列B”以及“型号1”、“型号2”等所有层级的栏目,可以使用 type='sun'

模板代码:

<div class="all-category">
    <h3>所有产品分类</h3>
    <ul>
        {dede:channel type='sun' currentstyle='<li class="current"><a href="[field:typelink/]">[field:typename/]</a></li>'}
            <li>
                <a href="[field:typelink/]">[field:typename/]</a>
            </li>
        {/dede:channel}
    </ul>
</div>

代码解释:

  • type='sun': 这个参数会递归地获取当前栏目下的所有层级的子栏目,包括孙子栏目、曾孙子栏目等。
  • 这种用法通常配合 CSS 样式来实现多级菜单的展开/折叠效果。

带缩略图的子栏目调用

如果你想在子栏目列表中显示每个栏目设置的缩略图,可以使用 [field:litpic/] 字段。

模板代码:

<div class="sub-category-with-img">
    <ul>
        {dede:channel type='son' row='6'}
            <li>
                <a href="[field:typelink/]">
                    <img src="[field:litpic/]" alt="[field:typename/]" />
                    <span>[field:typename/]</span>
                </a>
            </li>
        {/dede:channel}
    </ul>
</div>

代码解释:

  • [field:litpic/]: 获取该子栏目在后台设置的“缩略图”字段,如果某个子栏目没有设置缩略图,这里可能会显示一个默认图片或为空。
  • 你需要配合 CSS 来美化这个列表,使其以图片+文字的形式展示。

总结与注意事项

需求场景 核心标签和参数 说明
在当前栏目页调用其子栏目 {dede:channel type='son'} 最常用的方法,无需 typeid
在首页调用指定顶级栏目的子栏目 {dede:channel type='son' typeid='栏目ID'} 需要知道目标顶级栏目的 ID。
调用所有子孙栏目(多级) {dede:channel type='sun'} 递归获取所有层级的子栏目。
调用带样式的子栏目 {dede:channel type='son' currentstyle='...'} 用于高亮显示当前所在的子栏目。

重要提示:

  1. 缓存问题:DedeCMS 有强大的缓存机制,当你修改了模板代码后,如果前台页面没有立即生效,请到后台 “系统” -> “一键更新网站” -> “更新栏目HTML” 和 “更新文档HTML”,或者直接清除缓存。
  2. 栏目类型{dede:channel} 主要用于调用“栏目”,如果你的子栏目类型是“外部链接”或“单页文档”,它也能被调用,但请注意其行为可能和普通“文章列表”栏目略有不同。
  3. 命名规范:为了代码清晰和日后维护,建议给 dede:channel 循环块起一个别名,{dede:channel type='son' row='8' myname='subnav'},然后在循环体内使用 [field:myname:typename/] 这样的方式调用,虽然在这个简单例子中不必要,但在复杂模板中是个好习惯。

希望这份详细的指南能帮助您成功地在 DedeCMS 中调用子栏目!

-- 展开阅读全文 --
头像
dede首页产品图滚动如何实现?
« 上一篇 前天
C语言如何定义未知长度的数组?
下一篇 » 前天

相关文章

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

目录[+]