下面我将为你详细讲解如何实现,并提供几种常用场景的代码示例。
核心标签:{dede:channel}
{dede:channel} 是织梦中用于获取栏目列表的万能标签,要调用顶级栏目,关键在于使用 typeid 和 reid 这两个属性。
关键属性说明:
typeid: 指定一个栏目的ID,用来获取其子栏目,如果留空,则获取从顶级栏目开始的所有栏目。reid: 指定父栏目的ID,如果设置为0,则表示获取所有顶级栏目(即父栏目ID为0的栏目)。type: 栏目类型,默认为son(表示下级栏目),也可以是self(表示同级栏目)。row: 获取的栏目数量。col: 每行显示的栏目数量。currentstyle: (非常重要) 用于定义当前栏目所在链接的样式,你可以让当前栏目的链接高亮显示。
调用所有顶级栏目(最常用)
这是最基础也是最常用的方法,可以获取网站所有的一级栏目。
模板代码示例:
<ul class="topnav">
<li><a href="{dede:global.cfg_cmsurl/}/">网站首页</a></li>
{dede:channel type='top' row='8'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
代码解析:
-
{dede:channel type='top' row='8'}type='top': 这是核心!它告诉织梦只获取顶级栏目(即reid=0的栏目)。row='8': 限制只显示8个顶级栏目,如果不需要限制,可以去掉这个属性或设置为0。
-
[field:typelink/]: 输出栏目的链接地址,/a/。 -
[field:typename/]: 输出栏目的名称,公司简介”、“产品中心”。
带当前栏目高亮的顶级栏目调用
在实际网站导航中,我们通常希望用户当前所在的栏目能够高亮显示,方便用户识别,这时就需要用到 currentstyle 属性。
模板代码示例:
<ul class="nav">
<li><a href="{dede:global.cfg_cmsurl/}/" class="this">网站首页</a></li>
{dede:channel type='top' currentstyle="<li class='this'><a href='~typelink~'>~typename~</a></li>"}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
代码解析:
currentstyle="<li class='this'><a href='~typelink~'>~typename~</a></li>"- 这个属性定义了一个模板,当循环的栏目是当前页面所在的栏目时,
{dede:channel}就会输出这个模板,而不是默认的<li>...</li>。 ~typelink~和~typename~是currentstyle中的特殊占位符,分别会被替换成栏目的链接和名称。class='this'是一个自定义的CSS类,你可以在CSS文件中为它定义高亮样式,.nav .this a { color: #ff0000; /* 文字颜色变红 */ font-weight: bold; /* 文字加粗 */ }
- 这个属性定义了一个模板,当循环的栏目是当前页面所在的栏目时,
调用指定顶级栏目的子栏目
我们只想在某个特定区域显示某个顶级栏目下的子栏目,在“产品中心”下显示所有产品分类。
步骤:
-
找到顶级栏目的ID:
- 登录织梦后台。
- 进入【栏目管理】。
- 将鼠标悬停在你要调用的顶级栏目(如“产品中心”)上,浏览器状态栏会显示其ID,
typeid=5。
-
使用
typeid属性调用其子栏目:typeid属性会自动获取该ID栏目的所有下级栏目(包括多级子栏目,如果需要只获取一级子栏目,需要配合其他逻辑)。
模板代码示例:
假设“产品中心”的ID是 5。
<div class="product-categories">
<h3>产品分类</h3>
<ul>
{dede:channel typeid='5'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
</div>
代码解析:
typeid='5': 指定了只获取ID为5的栏目(即“产品中心”)的所有下级栏目。- 这个循环会输出“产品中心”下的所有一级、二级、三级...栏目,如果你只想获取它直接的一级子栏目,可以结合
reid和arclist等标签进行更复杂的查询,但对于大多数情况,直接使用typeid就足够了。
总结与注意事项
| 需求场景 | 核心标签 | 关键属性 | 说明 |
|---|---|---|---|
| 调用所有顶级栏目 | {dede:channel} |
type='top' |
最常用的导航栏实现方式。 |
| 带高亮的顶级栏目 | {dede:channel} |
type='top' + currentstyle |
提升用户体验,让用户知道自己在哪。 |
| 调用指定栏目的子栏目 | {dede:channel} |
typeid='X' (X为栏目ID) |
用于侧边栏、内容块等特定位置。 |
| 调用顶级栏目及子栏目 | {dede:channelartlist} |
typeid='top' |
如果需要同时输出顶级栏目和其下的子栏目列表,应使用 {dede:channelartlist} 标签,它专门用于制作“栏目+文章列表”的复杂布局。 |
重要提示:
- 缓存问题:织梦模板修改后,如果页面没有更新,可能是缓存导致的,请确保你清除了模板缓存(后台有“更新缓存”功能),或者浏览器缓存。
- 栏目类型:确保你要调用的栏目是“普通栏目”类型,而不是“外部链接”或“单页”等特殊类型,否则
typelink的行为可能不符合预期。
希望以上详细的解释和示例能帮助你完美地在织梦中实现循环调用顶级栏目的功能!
