dede首页如何同时调用多个二级栏目?

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

使用 channelartlist 标签(最推荐、最灵活)

这是官方推荐且功能最强大的方法,专门用于调用带有子栏目的栏目列表,它可以在一个标签内完成“调用一级栏目 + 循环调用其二级栏目”的所有操作。

dede首页调用多个二级栏目
(图片来源网络,侵删)

准备工作

确保你的网站后台已经正确设置了栏目层级。

  • 一级栏目 (顶级栏目):
    • 产品中心
    • 新闻资讯
    • 关于我们
  • 二级栏目 (子栏目):
    • 产品中心
      • 产品分类 A
      • 产品分类 B
    • 新闻资讯
      • 公司新闻
      • 行业动态

在首页模板 (index.htm) 中添加代码

将以下代码放置在你希望显示这些栏目列表的位置。

{dede:channelartlist typeid='0' row='10'}
  <!-- 循环开始,row='10' 表示调用10个一级栏目,typeid='0' 表示调用所有顶级栏目 -->
  <div class="main-box">
    <!-- 一级栏目名称 -->
    <h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
    <!-- 调用当前一级栏目下的所有二级栏目 -->
    <ul class="sub-list">
      {dede:channel type='son' noself='yes'}
      <!-- 
        type='son' 表示调用子栏目。
        noself='yes' 表示不调用栏目本身(即不重复显示一级栏目)。
        如果想显示所有下级栏目(包括孙栏目),可以用 `type='sun'`。
      -->
        <li>
          <a href="[field:typelink/]">[field:typename/]</a>
          <!-- 
            如果想在二级栏目后面再调用三级栏目,可以在这里继续嵌套 channel 标签。
            但注意,过多的嵌套会影响性能,且代码结构会变复杂。
          -->
        </li>
      {/dede:channel}
    </ul>
  </div>
{/dede:channelartlist}

代码详解

  • {dede:channelartlist ...}: 外层循环,用于获取一级栏目。

    • typeid='0': 调用所有顶级栏目,如果你想只调用指定的几个一级栏目,可以填写它们的ID,用逗号隔开,typeid='1,3,5'
    • row='10': 限制调用的一级栏目数量。
    • cacheid='channelartlist': 可选,用于设置缓存ID,提高首页加载速度。
  • {dede:field name='typeurl'/}: 获取当前一级栏目的链接地址。

    dede首页调用多个二级栏目
    (图片来源网络,侵删)
  • {dede:field name='typename'/}: 获取当前一级栏目的名称。

  • {dede:channel type='son' noself='yes'}: 内层循环,用于获取当前一级栏目下的二级栏目。

    • type='son': 指定获取类型为“子栏目”。
    • noself='yes': 不包含栏目本身,如果省略,那么一级栏目也会出现在列表中,通常我们不希望这样。

使用 arclist 标签(适用于调用带缩进的栏目)

如果你只是想在首页以列表形式展示所有栏目(包括一级和二级),并希望用缩进来体现层级关系,arclist 标签也是一个不错的选择。

在首页模板中添加代码

<ul class="all-category-list">
  {dede:channelartlist typeid='0'}
    <li>
      <h3><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h3>
      <div class="sub-category">
        {dede:channel type='son' row='8' noself='yes'}
          <a href="[field:typelink/]">[field:typename/]</a>
        {/dede:channel}
      </div>
    </li>
  {/dede:channelartlist}
</ul>

这个方法和方法一非常相似,只是外层循环的HTML结构做了调整,使其更符合一个“栏目块”的展示方式。

dede首页调用多个二级栏目
(图片来源网络,侵删)

手动调用指定的一级栏目及其子栏目(适用于布局复杂的首页)

如果你的首页布局非常特殊,产品中心”和“新闻资讯”要放在完全不同的位置,那么就不适合用一个大的循环来处理,你可以分别为它们调用。

场景假设

首页左侧是“产品中心”及其子栏目,右侧是“新闻资讯”及其子栏目。

在首页模板中添加代码

左侧代码 (产品中心): 假设“产品中心”的一级栏目ID是 1

<div class="left-box">
  <h2>产品中心</h2>
  <ul>
    {dede:channel type='son' typeid='1' row='8'}
      <li><a href="[field:typelink/]">[field:typename/]</a></li>
    {/dede:channel}
  </ul>
</div>

右侧代码 (新闻资讯): 假设“新闻资讯”的一级栏目ID是 2

<div class="right-box">
  <h2>新闻资讯</h2>
  <ul>
    {dede:channel type='son' typeid='2' row='8'}
      <li><a href="[field:typelink/]">[field:typename/]</a></li>
    {/dede:channel}
  </ul>
</div>

代码详解

  • typeid='1': 这里是关键,明确指定了要调用哪个一级栏目下的子栏目。
  • type='son': 同样,表示调用子栏目。
  • 这种方法非常直观,易于控制,但代码会比较冗余,如果栏目多,会写很多重复的代码。

重要注意事项

  1. 栏目ID: 在使用 typeid 时,务必去后台“栏目管理”中找到对应栏目的准确ID。
  2. 栏目模型: 确保你的二级栏目没有被设置为“外部链接”模型,否则 channel 标签可能无法正确获取其链接和名称。
  3. 缓存问题: DedeCMS 默认有缓存,修改完模板后,如果首页没有立即更新,可以:
    • 进入后台“生成” -> “更新主页HTML”,点击“更新主页”。
    • 或者清空一下系统缓存。
  4. CSS样式: 上述代码中的 class (如 main-box, sub-list) 是为了方便你添加CSS样式,你需要根据自己的网站设计,编写相应的CSS来美化这些列表的显示效果(设置间距、字体颜色、背景等)。
  5. 栏目为空: 如果某个一级栏目下没有发布任何子栏目,{dede:channel type='son'...} 这个循环将不会输出任何内容,页面会留出一个空白,你可以在循环外用 {dede:field name='typeid' function="isHasSon(@me)"/} 这样的方式判断并做相应处理,或者用CSS隐藏空的容器。

希望这些详细的解释和示例能帮助你成功在首页调用多个二级栏目!

-- 展开阅读全文 --
头像
dede栏目默认页为何生成失败?
« 上一篇 01-11
织梦为何默认模板数量如此之多?
下一篇 » 01-11

相关文章

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

目录[+]