dede二三级栏目如何设置与调用?

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

什么是二三级栏目?

在 DedeCMS 中,栏目的层级关系是通过一个字段来控制的,这个字段就是 reid (Related ID,关联ID)。

dede 二三级栏目
(图片来源网络,侵删)
  • 一级栏目 (顶级栏目)reid 字段的值为 0,它们是网站的根目录,直接挂在主菜单下。
  • 二级栏目:它的 reid 字段值是它所属的一级栏目的 ID,一级栏目“新闻中心”的 ID 是 5,那么所有隶属于“新闻中心”的栏目(如“国内新闻”、“国际新闻”)的 reid 都会是 5。
  • 三级栏目:它的 reid 字段值是它所属的二级栏目的 ID,二级栏目“国内新闻”的 ID 是 10,那么隶属于它的栏目(如“社会新闻”、“财经新闻”)的 reid 就会是 10。

一个栏目的 reid 就是指向它“父栏目”的 ID。


创建二三级栏目的详细步骤

假设我们要创建一个这样的栏目结构:

  • 一级栏目:产品中心
    • 二级栏目:智能手机
      • 三级栏目:iPhone华为
      • 三级栏目:小米
    • 二级栏目:电脑办公
      • 三级栏目:笔记本电脑
      • 三级栏目:台式机

第一步:创建一级栏目 “产品中心”

  1. 登录 DedeCMS 后台。
  2. 在左侧菜单栏中,点击 【栏目管理】 -> 【添加栏目】
  3. 在弹出的页面中,填写栏目信息:
    • 栏目名称产品中心
    • 上级栏目:默认是 【无上级栏目】,这就是一级栏目的标志。
    • 栏目类型:根据你的需求选择,封面”、“列表”等。
    • 其他信息(如栏目目录、关键词、描述等)按需填写。
  4. 点击 【确定】 保存。
  5. 记住这个栏目的 ID,你可以在栏目列表页面看到,假设它的 ID 是 5

第二步:创建二级栏目 “智能手机”

  1. 再次进入 【栏目管理】 -> 【添加栏目】
  2. 填写栏目信息:
    • 栏目名称智能手机
    • 上级栏目这是最关键的一步! 点击下拉框,选择你刚刚创建的 产品中心
    • 栏目类型:选择“列表”或“封面”。
    • 其他信息填写完毕后,点击 【确定】
  3. “智能手机”就成功创建为“产品中心”的二级栏目,它的 reid 值就是 5(产品中心的ID),记下它的 ID,假设为 10

第三步:创建三级栏目 “iPhone”

  1. 再次进入 【栏目管理】 -> 【添加栏目】
  2. 填写栏目信息:
    • 栏目名称iPhone
    • 上级栏目再次关键! 点击下拉框,选择刚刚创建的 智能手机
    • 栏目类型:选择“列表”或“封面”。
    • 其他信息填写完毕后,点击 【确定】
  3. “iPhone”就成功创建为“智能手机”的三级栏目,它的 reid 值就是 10(智能手机的ID)。

用同样的方法,你可以继续创建“华为”、“小米”(它们也是“智能手机”下的三级栏目)和“电脑办公”及其下的所有子栏目。


如何调用二三级栏目(模板标签)

在模板文件(通常是 .htm 文件)中,你需要使用 DedeCMS 的模板标签来循环输出这些栏目,最常用的是 channelartlisttype

调用一级栏目及其下的所有二级栏目

这是最常见的需求,比如网站主导航栏。

dede 二三级栏目
(图片来源网络,侵删)
<ul class="main-nav">
  {dede:channelartlist typeid='0' cacheid='channelnav'}
    <li>
      <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
      <!-- 如果该一级栏目下有子栏目,则调用 -->
      {dede:sql sql='Select id,typename,typedir From dede_arctype where reid=~id~ and ishidden<>1 order by sortrank'}
        <ul class="sub-nav">
          <li><a href="[field:typedir/]">[field:typename/]</a></li>
        </ul>
      {/dede:sql}
    </li>
  {/dede:channelartlist}
</ul>

代码解释:

  • {dede:channelartlist typeid='0' ...}typeid='0' 表示从所有顶级栏目(一级栏目)开始循环。
  • {dede:field name='typeurl'/}{dede:field name='typename'/}:输出当前一级栏目的链接和名称。
  • {dede:sql ...}:这是一个原生 SQL 查询标签,非常强大。
    • reid=~id~~id~ 是一个占位符,会被当前一级栏目的实际 ID 替换,这句 SQL 的意思就是“查询 reid 等于当前一级栏目 ID 的所有栏目”,也就是查询它的所有二级栏目。
    • ishidden<>1:排除隐藏的栏目。
    • [field:typedir/][field:typename/]:在 SQL 循环中,使用方括号 [] 来调用字段。

调用指定一级栏目下的所有二级和三级栏目

假设“产品中心”的 ID 是 5,我们要调用它的所有子孙栏目。

<div class="product-category">
  {dede:channel type='son' typeid='5'}
    <!-- 先循环出二级栏目 -->
    <dl>
      <dt><a href="[field:typeurl/]">[field:typename/]</a></dt>
      <!-- 再循环出当前二级栏目下的三级栏目 -->
      <dd>
        {dede:sql sql='Select id,typename,typedir From dede_arctype where reid=[field:id] and ishidden<>1 order by sortrank'}
          <a href="[field:typedir/]">[field:typename/]</a>
        {/dede:sql}
      </dd>
    </dl>
  {/dede:channel}
</div>

代码解释:

  • {dede:channel type='son' typeid='5'}type='son' 表示调用指定栏目(ID=5)下的所有直接子栏目(即二级栏目)。
  • [field:id]:在 {dede:channel} 循环内部,[field:id] 可以获取到当前二级栏目的 ID。
  • 内层的 {dede:sql} 查询 reid=[field:id],就找到了所有属于这个二级栏目的三级栏目。

注意事项和最佳实践

  1. 栏目排序:在添加栏目时,注意填写 “排序” 字段,数字越小,排序越靠前,这会影响栏目在列表中的显示顺序。
  2. 栏目类型
    • 封面栏目:通常用于不需要发布文章的“频道页”,关于我们”、“联系我们”,它本身可以发布内容,但不能作为文章列表。
    • 列表栏目:用于发布文章,会生成文章列表页。
    • 外部链接:点击栏目名会直接跳转到你指定的外部网址。
  3. 栏目目录:建议使用英文或拼音,避免使用中文和特殊符号,这有利于 URL 的规范化和SEO。
  4. 性能考虑:当栏目层级非常深(比如超过三级)或者数量非常多时,嵌套查询可能会对网站性能产生轻微影响,对于绝大多数网站,三层结构已经足够,无需过度设计。
  5. 使用缓存:DedeCMS 的标签调用默认是带缓存的,在后台修改栏目后,需要更新栏目缓存更新HTML,前台才能看到最新效果,你可以在后台的【生成】菜单中进行操作。

通过以上步骤和标签,你就可以在 DedeCMS 中自如地创建和管理二三级栏目,并构建出清晰、有序的网站内容架构。

dede 二三级栏目
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede水印无法添加怎么办?
« 上一篇 昨天
计算机C语言考试怎么高效通过?
下一篇 » 昨天

相关文章

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