dede一二级三级栏目如何调用?

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

核心原理

DedeCMS 调用栏目的核心是使用 {dede:channel} 标签,这个标签非常强大,通过不同的属性可以实现各种调用需求。

dede一级二级三级栏目调用
(图片来源网络,侵删)
  • 顶级栏目调用: typeid='0'
  • 指定栏目调用: typeid='栏目ID'
  • 下级栏目调用: reid='父栏目ID'
  • 排除某个栏目: notypeid='要排除的栏目ID'
  • 控制显示数量: row='数量'
  • 控制是否显示栏目名称: type='son' (仅显示子栏目), type='self' (仅显示自身), type='top' (仅显示顶级栏目)

只调用一级栏目(最常用)

这是最基础的需求,通常用于网站的顶部主导航。

适用场景: 网站主菜单、页脚链接等。

代码示例:

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

代码解析:

dede一级二级三级栏目调用
(图片来源网络,侵删)
  • {dede:channel type='top' ...}: type='top' 是关键,它告诉 DedeCMS 只调用顶级栏目。
  • row='8': 可选,表示只调用前 8 个一级栏目。
  • [field:typelink/]: 输出栏目的链接地址。
  • [field:typename/]: 输出栏目的名称。

调用一级栏目及其对应的二级栏目

这是最常见的导航栏实现方式,鼠标悬停在一级栏目上时,显示其下的所有二级栏目。

适用场景: 下拉式主导航。

实现思路: 使用 {dede:channel} 调用一级栏目,然后在一级栏目循环的内部,再嵌套一个 {dede:channel} 调用其子栏目。

代码示例:

dede一级二级三级栏目调用
(图片来源网络,侵删)
{dede:channel type='top' row='8'}
    <li class="nav-item">
        <a href="[field:typelink/]">[field:typename/]</a>
        <ul class="sub-nav">
            {dede:channel type='son' typeid='[field:id]'}
                <li><a href="[field:typelink/]">[field:typename/]</a></li>
            {/dede:channel}
        </ul>
    </li>
{/dede:channel}

代码解析:

  1. 外层循环 (一级栏目):

    • {dede:channel type='top' ...}: 循环输出所有顶级栏目。
    • [field:id]: 在循环中,[field:id] 代表当前一级栏目的 ID。
  2. 内层循环 (二级栏目):

    • {dede:channel type='son' typeid='[field:id]'}: 这是关键。
      • type='son': 表示只调用子栏目。
      • typeid='[field:id]': 指定要查询的父栏目ID,这个ID就是外层循环中当前一级栏目的ID,这样就能准确找到每个一级栏目下的二级栏目了。

调用一级、二级、三级栏目(完整三级结构)

这个稍微复杂一些,通常用于网站的左侧分类导航或者复杂的面包屑导航。

适用场景: 电商网站的商品分类、多级内容管理系统。

实现思路: 在场景二的基础上,再增加一层嵌套循环,用于调用三级栏目。

代码示例:

<div class="category-nav">
    {dede:channel type='top' row='10'}
        <div class="category-item">
            <h3><a href="[field:typelink/]">[field:typename/]</a></h3>
            <div class="category-children">
                {dede:channel type='son' typeid='[field:id]'}
                    <dl>
                        <dt><a href="[field:typelink/]">[field:typename/]</a></dt>
                        <dd>
                            {dede:channel type='son' typeid='[field:id]'}
                                <a href="[field:typelink/]">[field:typename/]</a>
                            {/dede:channel}
                        </dd>
                    </dl>
                {/dede:channel}
            </div>
        </div>
    {/dede:channel}
</div>

代码解析:

  1. 第一层 (一级栏目): type='top', typeid 不需要,因为它本身就是顶级。
  2. 第二层 (二级栏目): type='son', typeid='[field:id]' (一级栏目的ID)。
  3. 第三层 (三级栏目): type='son', typeid='[field:id]' (二级栏目的ID),这里的 [field:id] 指的是当前二级栏目的ID,从而找到它的所有子栏目(即三级栏目)。

调用指定一级栏目下的所有子栏目(不限层级)

有时候你可能只想显示某一个特定栏目下的所有内容,产品中心”下的所有分类,不管它是二级还是三级。

适用场景: 单独的产品分类页、帮助中心等。

实现思路: 使用 reid 属性,它表示查询所有 reid 指定ID的子栏目,并且会递归查找所有层级的子栏目。

代码示例:

假设“产品中心”这个一级栏目的 ID 是 2

<h2>产品中心</h2>
<ul>
    {dede:channel reid='2'}
        <li><a href="[field:typelink/]">[field:typename/]</a></li>
    {/dede:channel}
</ul>

代码解析:

  • {dede:channel reid='2'}: reid='2' 表示调用所有父栏目ID为2的子栏目,并且会无限级向下查找,所以它会输出ID为2的栏目的所有二级、三级、四级...栏目。
  • 这种方式非常方便,但要注意,如果栏目层级非常深,可能会生成很长的列表。

高级技巧与注意事项

  1. 当前栏目高亮 为了让用户知道自己在哪个栏目下,通常需要给当前栏目的链接添加一个高亮样式(class="current")。 这需要结合 {dede:field} 标签和判断语句来实现,通常在模板文件里配合PHP代码使用。

    示例 (在列表页模板 list_article.htm 中):

    {dede:channel type='top' row='8'}
        <li>
            <a href="[field:typelink/]" 
               {dede:field name='typeid' runphp='yes'}
                   @me = (@me == '当前栏目ID') ? 'class="current"' : '';
               {/dede:field}>
               [field:typename/]
            </a>
        </li>
    {/dede:channel}

    注意: '当前栏目ID' 需要替换成实际的数字,或者使用更灵活的PHP代码来动态获取。

  2. 栏目为空时隐藏 如果一个一级栏目下没有任何子栏目(文章或子分类),你可能希望在下拉菜单中不显示它。 这可以通过自定义函数或修改DedeCMS核心文件来实现,比较复杂,一个简单的方法是在后台管理栏目时,确保没有内容的栏目不要设置为“在导航栏显示”。

  3. 栏目图片 如果你的栏目设置了图片,可以通过 [field:typedir/] 获取目录,或者直接使用 [field:image/](如果后台有此字段)来调用。

    示例 (调用栏目图片):

    {dede:channel type='top' row='8'}
        <a href="[field:typelink/]">
            <img src="[field:image/]" alt="[field:typename/]">
            <span>[field:typename/]</span>
        </a>
    {/dede:channel}

    注意: [field:image/] 字段需要在后台“栏目管理” -> “增加一个顶级栏目”时,在“栏目图片”选项中上传。

调用需求 核心标签代码 关键属性
调用一级栏目 {dede:channel type='top'} type='top'
调用一级及二级 外层 {dede:channel type='top'}
内层 {dede:channel type='son' typeid='[field:id]'}
内层 typeid 为外层 [field:id]
调用多级栏目 嵌套使用 {dede:channel type='son' typeid='[field:id]'} 逐层传递 [field:id]
调用指定栏目的所有子栏目 {dede:channel reid='栏目ID'} reid 属性

希望这份详细的指南能帮助您在 DedeCMS 项目中灵活地调用各级栏目!

-- 展开阅读全文 --
头像
C语言system函数如何设置终端颜色?
« 上一篇 01-10
dede织梦后台登录界面乱码咋办?
下一篇 » 01-10
取消
微信二维码
支付宝二维码

目录[+]