dede如何循环调用二级栏目?

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

核心标签解析

在开始之前,我们先理解两个核心标签:

dede 循环二级栏目
(图片来源网络,侵删)
  1. {dede:channel}:用于获取栏目列表。

    • typeid='top':获取顶级栏目(一级栏目)。
    • typeid='当前栏目ID':获取指定栏目下的子栏目(二级栏目)。
    • reid='0':与 typeid='top' 效果相同,获取顶级栏目。
    • typeid='父栏目ID':获取指定父栏目下的子栏目。
    • row='数字':获取的栏目数量。
    • col='数字':每行显示的栏目数量。
    • currentstyle='':当前栏目所在层级的样式模板。
  2. {dede:field}:用于获取当前文档或栏目的字段信息。

    • {dede:field.name/}:获取当前栏目的名称。
    • {dede:field.id/}:获取当前栏目的ID。
    • {dede:field.typename/}:获取当前栏目的别名(与 name 类似,但更推荐用 name)。

固定父栏目下的二级栏目(最常用)

如果你想在某个固定的父栏目(新闻中心”,ID为 2)下循环显示它的所有二级栏目,这是最直接的方法。

适用场景:网站侧边栏、页脚的特定栏目区块等。

dede 循环二级栏目
(图片来源网络,侵删)

代码示例:

<h3>新闻中心</h3>
<ul>
  {dede:channel typeid='2' row='10' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a></li>"}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
  {/dede:channel}
</ul>

代码解释:

  • typeid='2':这是最关键的部分,这里的 2 是“新闻中心”这个一级栏目的 ID,你需要将其替换为你自己的父栏目ID。
  • row='10':表示最多调用10个子栏目。
  • currentstyle='...':定义了如果访问者正在浏览这个二级栏目,它应该显示的样式。~typelink~ 会被替换为栏目链接,~typename~ 会被替换为栏目名。
  • [field:typelink/]:输出二级栏目的链接地址。
  • [field:typename/]:输出二级栏目的名称。

循环所有一级栏目及其对应的二级栏目(推荐)

这是最经典和最常用的布局方式,常见于网站的主导航下方或首页的主要内容区,它会先循环所有一级栏目,然后在每个一级栏目下再循环出它的子栏目。

适用场景:首页主要内容区,展示整个网站的栏目结构。

dede 循环二级栏目
(图片来源网络,侵删)

代码示例:

{dede:channel type='top' row='8'}
  <div class="main-category">
    <h2><a href="[field:typelink/]">[field:typename/]</a></h2>
    <div class="sub-category">
      <ul>
        {dede:channel typeid='[field:id]' row='10'}
          <li><a href="[field:typelink/]">[field:typename/]</a></li>
        {/dede:channel}
      </ul>
    </div>
  </div>
{/dede:channel}

代码解释:

  1. 外层循环 {dede:channel type='top' row='8'}:

    • type='top':表示获取所有顶级栏目(一级栏目)。typeid='top' 也可以达到同样效果。
    • row='8':假设网站有8个一级栏目。
    • 这个循环会为每一个一级栏目生成一个 <div class="main-category"> 块。
  2. 内层循环 {dede:channel typeid='[field:id]' row='10'}:

    • typeid='[field:id]':这是实现嵌套的核心。[field:id] 是 DedeCMS 的一个特殊用法,它会动态获取外层循环中当前栏目的ID
    • 当外层循环到“产品展示”(假设ID为3)时,内层的 typeid 就会变成 typeid='3',从而调用出“产品展示”下的所有二级栏目。
    • 这个循环会在每个一级栏目块内,生成一个包含其所有子栏目的列表。

调用当前一级栏目下的所有二级栏目

这个方法非常有用,当你进入任何一个一级栏目页面时,自动显示它下面的所有二级栏目,方便用户导航。

适用场景:一级栏目列表页 (list_article_*.htm) 的内容区域。

代码示例:

list_article.htm 模板文件中,你可以这样写:

<h2>{dede:field.name/}</h2>
<p>这里是 {dede:field.name/} 的简介...</p>
<div class="sub-nav">
  <h3>下属栏目:</h3>
  <ul>
    {dede:channel typeid='~id~' row='20'}
      <li><a href="[field:typelink/]">[field:typename/]</a></li>
    {/dede:channel}
  </ul>
</div>
<!-- 这里再调用该栏目下的文章列表 -->
{dede:list pagesize='10'}
  <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:list}

代码解释:

  • {dede:field.name/}:获取当前一级栏目的名称,用作标题。
  • {dede:channel typeid='~id~' row='20'}:
    • typeid='~id~':这是另一个动态获取ID的语法,在栏目列表页模板中,~id~ 会自动解析为当前正在访问的这个一级栏目的ID,这比 [field:id] 在此场景下更明确。
    • 这个标签会自动调用当前栏目ID下的所有子栏目(即二级栏目)。

总结与注意事项

方法 核心代码 适用场景 关键点
方法一 {dede:channel typeid='父栏目ID'} 固定位置显示某父栏目的子栏目 需要手动填写父栏目的 typeid
方法二 外层 type='top',内层 typeid='[field:id]' 首页展示全站栏目结构 嵌套循环,利用 [field:id] 动态获取父ID。
方法三 {dede:channel typeid='~id~'} 在一级栏目页显示其下属栏目 list_article.htm 中使用,~id~ 自动获取当前栏ID。

重要提示:

  1. 获取栏目ID:在 DedeCMS 后台,将鼠标移动到“栏目管理”的某个栏目名称上,浏览器左下角状态栏会显示 catalog_edit.php?id=数字,这个 数字 就是该栏目的ID。
  2. 模板缓存:修改模板文件后,如果看不到效果,请去后台“生成” -> “更新HTML”,并确保模板缓存已关闭或已更新。
  3. CSS 样式:以上代码只提供了 HTML 结构,你需要配合 CSS 样式才能实现美观的布局,例如方法二中的 main-categorysub-category 的样式。

希望这些详细的解释和示例能帮助你完全掌握在 DedeCMS 中循环二级栏目的方法!

-- 展开阅读全文 --
头像
12864zw C语言程序如何实现?
« 上一篇 今天
织梦cms管理员密码
下一篇 » 今天

相关文章

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

目录[+]