在 DedeCMS 中,获取顶级栏目的核心方法是利用 channel 标签,并通过特定的属性来筛选出顶级栏目。
核心标签:{dede:channel}
{dede:channel} 是 DedeCMS 中最常用、最灵活的栏目列表标签,它默认会显示当前栏目的所有子栏目,但通过 typeid 和 reid 属性的组合,可以精确地控制显示哪些栏目。
使用 typeid='top'(最简单直接)
这是最常用、最简单的方法,专门用于获取所有顶级栏目。
标签代码:
{dede:channel type='top' row='10'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
代码解析:
{dede:channel ...}:调用栏目列表。type='top':这是最关键的属性,它告诉 DedeCMS 只获取顶级栏目。row='10':可选属性,表示只显示前 10 个顶级栏目,如果不写,则显示所有顶级栏目。[field:typelink/]:栏目链接,等同于[field:link/]。[field:typename/]:栏目名称。
示例:在一个页面(如首页)中显示所有顶级栏目导航
<div class="mainnav">
<ul>
{dede:channel type='top'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{dede:channel}
</ul>
</div>
使用 typeid 和 reid='0'(更灵活,推荐)
这种方法更底层,也更具灵活性,可以与其他条件结合使用。
标签代码:
{dede:channel typeid='0' reid='0'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
代码解析:
typeid='0':typeid默认是当前栏目的 ID,当设置为0时,表示从全站所有栏目中进行查询。reid='0':reid是父级栏目的 ID,当设置为0时,表示查询父级栏目为0的栏目,也就是顶级栏目。
这两个条件组合起来,效果等同于 type='top',但提供了更多的扩展性。
高级用法与常用属性
{dede:channel} 标签非常强大,可以结合多种属性实现复杂的需求。
限制显示数量
使用 row 属性来限制显示的栏目数量。
{dede:channel type='top' row='8'}
<!-- 只显示8个顶级栏目 -->
{/dede:channel}
排序方式
使用 sort 属性来指定栏目的排序方式。
sort='hot'或sort='click':按点击量从高到低排序。sort='sortrank':按后台“排序”字段的值排序(默认方式)。sort='id':按栏目ID排序。
{dede:channel type='top' sort='hot' row='10'}
<!-- 按点击量排序,显示前10个顶级栏目 -->
{/dede:channel}
自栏目标签(获取更多信息)
如果需要显示栏目的更多属性(如栏目图片、描述等),可以使用自栏目标签 {dede:channelartlist} 或在 channel 标签中使用 itemstyle 属性。
使用 channel 标签 + itemstyle
{dede:channel type='top' row='6'}
<li>
<a href="[field:typelink/]">
<img src="[field:picname/]" alt="[field:typename/]">
<span>[field:typename/]</span>
</a>
</li>
{/dede:channel}
注意: 这种方式要求栏目在后台设置了“栏目图片”,否则 [field:picname/] 为空。
使用 channelartlist 标签(更推荐用于栏目列表)
{dede:channelartlist} 通常用于调用一个顶级栏目及其下的子栏目,但也可以单独调用顶级栏目。
{dede:channelartlist typeid='top' row='6'}
<li>
<a href="{dede:field name='typeurl'/}">
<img src="{dede:field name='picname'/}" alt="{dede:field name='typename'/}">
<span>{dede:field name='typename'/}</span>
</a>
</li>
{/dede:channelartlist}
代码解析:
typeid='top':同样是调用顶级栏目。{dede:field name='typeurl'/}:等同于[field:typelink/]。{dede:field name='picname'/}:栏目图片。{dede:field name='typename'/}:栏目名称。
常见问题与注意事项
-
为什么
type='top'没有效果?- 检查缓存:这是最常见的原因,修改模板后,务必在 DedeCMS 后台点击“生成” -> “更新HTML” -> “更新主页HTML” 或 “更新栏目HTML”,清除缓存。
- 检查栏目设置:确保你的栏目确实是在顶级,没有被错误地设置为某个栏目的子栏目。
- 标签拼写错误:确保
type='top'中的top是小写,并且没有多余的空格。
-
typeid和reid的区别是什么?typeid:指定查询的“起始范围”。typeid='0'表示全站范围。reid:指定查询的“父级条件”。reid='0'表示只查询顶级栏目。- 两者结合使用,可以精确地定位到你想要的栏目集合。
-
如何调用指定顶级栏目(例如只调用 ID 为 1 的顶级栏目)?
- 使用
typeid属性,直接指定栏目 ID。
- 使用
{dede:channel typeid='1'}
<!-- 只调用 ID 为 1 的这个顶级栏目 -->
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
| 需求 | 推荐标签 | 关键属性 |
|---|---|---|
| 获取所有顶级栏目 | {dede:channel} |
type='top' 或 typeid='0' reid='0' |
| 获取指定数量的顶级栏目 | {dede:channel} |
type='top' + row='数字' |
| 按点击量排序的顶级栏目 | {dede:channel} |
type='top' + sort='hot' |
| 获取带图片的顶级栏目 | {dede:channelartlist} 或 {dede:channel} |
typeid='top' + [field:picname/] |
对于绝大多数情况,使用 {dede:channel type='top'} 是最简单、最直接的选择,当你需要更复杂的逻辑或更多栏目信息时,再考虑使用 typeid、reid、sort 等属性或 channelartlist
