织梦二级栏目调用方法是什么?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 织梦建站 正文

下面我将为您详细介绍几种最常用和最实用的方法,并提供详细的代码示例和解释。

核心原理

织梦调用栏目的核心标签是 {dede:channel},要实现二级栏目的调用,我们需要使用嵌套循环(循环里面再套循环)。

  • 外层循环:使用 {dede:channel} 调用所有顶级栏目(一级栏目)
  • 内层循环:在一级栏目的循环体内,再次使用 {dede:channel},但这次需要通过 typeid 属性指定当前一级栏目的ID,从而只调用它下面的二级栏目

最常用的方法(推荐)

这种方法最直观,代码清晰,适用于绝大多数场景,比如网站主导航下拉菜单。

代码示例

{dede:channel type='top' row='10'}
    <li>
        <!-- 一级栏目链接 -->
        <a href="[field:typelink/]">[field:typename/]</a>
        <!-- 开始二级栏目循环 -->
        <div class="subnav">
            {dede:channel type='son' typeid='[field:id/]'}
            <a href="[field:typelink/]">[field:typename/]</a>
            {/dede:channel}
        </div>
        <!-- 结束二级栏目循环 -->
    </li>
{/dede:channel}

代码详解

  1. 外层循环:一级栏目

    • {dede:channel type='top' row='10'}
      • type='top':这是关键参数,表示只调用顶级栏目(即一级栏目)。
      • row='10':表示调用的一级栏目数量,最多10个,如果不写,默认调用所有顶级栏目。
      • </li><div class="subnav"> 是为了包裹一级栏目和其二级菜单而添加的HTML结构,您可以根据自己的CSS需求修改。
  2. 内层循环:二级栏目

    • {dede:channel type='son' typeid='[field:id/]'}
      • type='son':表示调用子栏目
      • typeid='[field:id/]':这是另一个关键参数,它引用了外层循环中当前一级栏目的ID ([field:id]),这样,内层循环就知道要调用哪个一级栏目下面的二级栏目了。
    • [field:typelink/][field:typename/] 分别输出二级栏目的链接和名称。

调用指定一级栏目下的二级栏目

你可能只想调用某一个特定一级栏目(产品中心”)下的所有二级栏目,而不是所有一级栏目下的。

代码示例

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

<div class="product-category">
    {dede:channel type='son' typeid='2'}
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:channel}
</div>

代码详解

  • 这种方法非常简单,直接使用 {dede:channel type='son' typeid='2'}
  • typeid='2' 直接指定了你要查询的父级栏目ID。
  • type='son' 表示只查询ID为2的栏目的直接子栏目(即二级栏目)。
  • 这种方法常用于页脚的“快速导航”或者某个特定内容区域的分类展示。

调用所有层级的栏目(递归调用)

如果你需要一个可以无限层级的栏目调用(比如网站地图),或者想一次性获取所有栏目数据自己进行处理,可以使用递归调用。

代码示例

<ul>
    {dede:channelartlist typeid='0' cacheid='channellist'}
        <li>
            <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
            <!-- 检查并输出子栏目 -->
            {dede:channel type='son' noself='yes'}
            <ul class="sonlist">
                {dede:field name='typename'/} - {dede:field name='id'/}
                <!-- 这里可以继续嵌套调用三级、四级... -->
            </ul>
            {/dede:channel}
        </li>
    {/dede:channelartlist}
</ul>

代码详解

  • {dede:channelartlist}:这个标签专门用于获取栏目列表,并支持在循环中获取当前栏目的信息。
  • typeid='0':表示获取所有顶级栏目。
  • {dede:field name='typeurl'/}{dede:field name='typename'/}:在 channelartlist 循环中,使用 field 标签来获取当前栏目的信息。
  • {dede:channel type='son' noself='yes'}:在 channelartlist 循环内部,同样可以使用 channel 标签来调用子栏目。noself='yes' 表示不包含栏目本身。
  • 递归:你可以看到,在二级栏目的 <ul> 内部,你可以再次嵌套一个 {dede:channelartlist}{dede:channel} 循环,通过 typeid 指定当前二级栏目的ID,来调用三级栏目,以此类推,实现无限级调用。

属性 说明
{dede:channel} type='top' 调用顶级栏目(一级栏目)
type='son' 调用指定栏目的子栏目
typeid='栏目ID' 指定栏目ID,用于限定查询范围
row='数字' 调用栏目数量
currentstyle='' 高亮样式,非常实用!
{dede:channelartlist} typeid='0' 获取所有顶级栏目
cacheid='缓存ID' 设置缓存,提高性能

高级技巧:高亮当前栏目

在导航菜单中,我们通常希望当前所在的栏目能高亮显示,织梦提供了 currentstyle 属性来实现这个功能。

示例代码

{dede:channel type='top' currentstyle="<li class='on'><a href='~typelink~'>~typename~</a></li>"}
    <li>
        <a href="[field:typelink/]">[field:typename/]</a>
        <div class="subnav">
            {dede:channel type='son' typeid='[field:id]' currentstyle="<a href='~typelink~' class='active'>~typename~</a>"}
            <a href="[field:typelink/]">[field:typename/]</a>
            {/dede:channel}
        </div>
    </li>
{/dede:channel}
  • currentstyle 属性里的 ~typename~~typelink~ 等是模板替换符号,会分别被替换为 [field:typename/][field:typelink/] 的值。
  • 当访问的栏目URL与 [field:typelink/] 匹配时,就会输出 currentstyle 中定义的HTML结构。
  • 在上面的例子中,一级栏目高亮会添加 class='on',二级栏目高亮会添加 class='active',你只需要在CSS中定义好 .on.active 的样式即可。
需求场景 推荐方法 关键代码
主导航下拉菜单 方法一 {dede:channel type='top'} 嵌套 {dede:channel type='son' typeid='[field:id]'}
页脚或特定区域分类 方法二 {dede:channel type='son' typeid='指定ID'}
网站地图等无限级 方法三 {dede:channelartlist} 嵌套 {dede:channel}
高亮当前栏目 结合 currentstyle {dede:channel} 中添加 currentstyle 属性

希望这份详细的教程能帮助您在织梦CMS中轻松调用二级栏目!如果您有任何疑问,欢迎随时提问。

-- 展开阅读全文 --
头像
dede仿站如何实现二级菜单?
« 上一篇 02-27
dede友情链接被挂马怎么办?
下一篇 » 02-27

相关文章

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

目录[+]