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

- 一级栏目 (顶级栏目):
reid字段的值为 0,它们是网站的根目录,直接挂在主菜单下。 - 二级栏目:它的
reid字段值是它所属的一级栏目的 ID,一级栏目“新闻中心”的 ID 是 5,那么所有隶属于“新闻中心”的栏目(如“国内新闻”、“国际新闻”)的reid都会是 5。 - 三级栏目:它的
reid字段值是它所属的二级栏目的 ID,二级栏目“国内新闻”的 ID 是 10,那么隶属于它的栏目(如“社会新闻”、“财经新闻”)的reid就会是 10。
一个栏目的 reid 就是指向它“父栏目”的 ID。
创建二三级栏目的详细步骤
假设我们要创建一个这样的栏目结构:
- 一级栏目:
产品中心- 二级栏目:
智能手机- 三级栏目:
iPhone、华为 - 三级栏目:
小米
- 三级栏目:
- 二级栏目:
电脑办公- 三级栏目:
笔记本电脑 - 三级栏目:
台式机
- 三级栏目:
- 二级栏目:
第一步:创建一级栏目 “产品中心”
- 登录 DedeCMS 后台。
- 在左侧菜单栏中,点击 【栏目管理】 -> 【添加栏目】。
- 在弹出的页面中,填写栏目信息:
- 栏目名称:
产品中心 - 上级栏目:默认是
【无上级栏目】,这就是一级栏目的标志。 - 栏目类型:根据你的需求选择,封面”、“列表”等。
- 其他信息(如栏目目录、关键词、描述等)按需填写。
- 栏目名称:
- 点击 【确定】 保存。
- 记住这个栏目的 ID,你可以在栏目列表页面看到,假设它的 ID 是 5。
第二步:创建二级栏目 “智能手机”
- 再次进入 【栏目管理】 -> 【添加栏目】。
- 填写栏目信息:
- 栏目名称:
智能手机 - 上级栏目:这是最关键的一步! 点击下拉框,选择你刚刚创建的
产品中心。 - 栏目类型:选择“列表”或“封面”。
- 其他信息填写完毕后,点击 【确定】。
- 栏目名称:
- “智能手机”就成功创建为“产品中心”的二级栏目,它的
reid值就是 5(产品中心的ID),记下它的 ID,假设为 10。
第三步:创建三级栏目 “iPhone”
- 再次进入 【栏目管理】 -> 【添加栏目】。
- 填写栏目信息:
- 栏目名称:
iPhone - 上级栏目:再次关键! 点击下拉框,选择刚刚创建的
智能手机。 - 栏目类型:选择“列表”或“封面”。
- 其他信息填写完毕后,点击 【确定】。
- 栏目名称:
- “iPhone”就成功创建为“智能手机”的三级栏目,它的
reid值就是 10(智能手机的ID)。
用同样的方法,你可以继续创建“华为”、“小米”(它们也是“智能手机”下的三级栏目)和“电脑办公”及其下的所有子栏目。
如何调用二三级栏目(模板标签)
在模板文件(通常是 这是最常见的需求,比如网站主导航栏。 代码解释: 假设“产品中心”的 ID 是 5,我们要调用它的所有子孙栏目。 代码解释: 通过以上步骤和标签,你就可以在 DedeCMS 中自如地创建和管理二三级栏目,并构建出清晰、有序的网站内容架构。.htm 文件)中,你需要使用 DedeCMS 的模板标签来循环输出这些栏目,最常用的是 channelartlist 和 type
调用一级栏目及其下的所有二级栏目

<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 循环中,使用方括号 [] 来调用字段。调用指定一级栏目下的所有二级和三级栏目
<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],就找到了所有属于这个二级栏目的三级栏目。
注意事项和最佳实践

