核心标签:{dede:channel}
{dede:channel} 是最核心、最常用的调用栏目标签,它主要用于获取顶级栏目和其下的子栏目。
基础用法:调用所有顶级栏目
这是最简单的用法,通常用于制作网站的顶部主导航栏。
代码示例:
{dede:channel type='top'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
代码解析:
{dede:channel type='top'}: 调用所有顶级栏目。type='top': 这是最重要的属性,表示只调用顶级栏目(即顶级分类)。
[field:typelink/]: 输出栏目的链接地址。https://www.yoursite.com/plus/list.php?tid=1。[field:typename/]: 输出栏目的名称,公司简介”、“产品中心”。- 标签之间的内容会为每个栏目循环一次。
带有子栏目的调用(二级栏目)
在很多网站中,主导航栏的某个栏目下会悬浮显示一个二级菜单,这就需要在一个栏目循环中,再调用它的子栏目。
代码示例:
{dede:channel type='top' currentstyle="<li class='on'><a href='~typelink~'>~typename~</a></li>"}
<li>
<a href="[field:typelink/]">[field:typename/]</a>
<!-- 调用当前顶级栏目的子栏目 -->
{dede:sonchannel noself='yes'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:sonchannel}
</li>
{/dede:channel}
代码解析:
{dede:channel type='top'}: 循环输出所有顶级栏目。currentstyle: 这是一个非常有用的属性,当栏目处于当前页面时,会使用这里的样式替换掉默认的<a>标签。~typelink~和~typename~是currentstyle属性中的特殊占位符,会被替换为实际的链接和名称。
{dede:sonchannel noself='yes'}: 在顶级栏目循环的内部,使用此标签来调用当前顶级栏目的所有子栏目。noself='yes': 表示不调用栏目本身,只调用它的子栏目,如果不需要可以省略。
常用属性详解
{dede:channel} 标签有很多属性,可以根据需要组合使用。
| 属性名 | 说明 | 示例 |
|---|---|---|
type |
指定栏目类型 | top: 顶级栏目son: 子栏目self: 本栏目 |
row |
调用栏目数量 | row='6': 只调用前6个栏目 |
col |
每行显示的栏目数 | col='3': 将调用的栏目分成3列显示 |
currentstyle |
当前栏目的样式 | 见上面的二级菜单示例 |
typeid |
指定调用某个栏目及其子栏目 | typeid='2': 调用ID为2的栏目及其所有子栏目 |
reid |
指定调用父ID为reid的栏目 | reid='5': 调用所有父栏目ID为5的子栏目 |
cacheid |
缓存ID | cacheid='nav': 将此查询结果缓存,提高加载速度 |
进阶用法:调用指定层级的栏目
有时候你可能需要调用第三级甚至更深的栏目,或者调用某个特定父栏目下的所有层级的栏目。
场景1:调用某个顶级栏目下的所有子栏目(不限层级)
假设你要调用“产品中心”(假设其ID为3)下的所有产品,包括一级、二级、三级等。
代码示例:
<h2>产品中心</h2>
<ul>
{dede:channel type='son' typeid='3'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
解析:
typeid='3': 指定了父栏目的ID。type='son': 会调用该父栏目下的所有层级的子栏目,如果只想调用下一级,可以不加type属性。
场景2:调用指定栏目(非顶级)
如果你想调用一个具体的栏目,关于我们”下的“发展历程”。
代码示例:
{dede:channel typeid='10'}
<h1>[field:typename/]</h1>
<p>这里是栏目的描述,可以通过自定义字段获取。</p>
{/dede:channel}
解析:
typeid='10': 直接指定栏目的ID,{dede:channel}会循环一次,输出这个栏目的信息。typeid指定的是一个顶级栏目,type默认为son。
高级技巧:使用SQL查询调用
当织梦内置标签无法满足复杂需求时(按特定排序、调用自定义字段等),可以直接使用SQL查询。
警告:直接操作数据库有风险,请确保你的SQL语句正确,并做好备份。
示例:调用所有栏目,并按排序字段 sortrank 降序排列。
代码示例:
{dede:sql sql='SELECT id,typename,typelink FROM `dede_arctype` WHERE reid=0 ORDER BY sortrank DESC'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:sql}
代码解析:
{dede:sql}: 执行自定义SQL的标签。sql='...': SQL查询语句。dede_arctype: 这是织梦存放栏目的默认数据表名。(如果你的表前缀不是dede_,请务必修改)WHERE reid=0: 条件,只选择顶级栏目(reid为0表示顶级)。ORDER BY sortrank DESC: 按sortrank(后台的排序权重)字段降序排列。
[field:字段名/]: 在SQL标签中,可以通过这种方式获取查询结果中的字段值。
最佳实践与常见问题
-
如何给栏目添加CSS类? 使用
currentstyle是最方便的,也可以结合PHP判断。{dede:channel type='top'} <li class="{dede:field.name runphp='yes'}if(@me == '首页') @me = 'active'; else @me = '';{/dede:field.name}"> <a href="[field:typelink/]">[field:typename/]</a> </li> {/dede:channel} -
栏目调用不出来,怎么办?
- 检查ID:
typeid或reid写错了是常见原因。 - 检查缓存: 有时后台修改了栏目,前台模板未更新,可以去后台“系统” -> “一键更新网站” -> “更新栏目HTML”。
- 检查栏目状态: 确保后台该栏目是“隐藏”以外的状态(如“公开”)。
- 检查表前缀: 如果使用SQL查询,确保表名
dede_arctype的前缀dede_是正确的。
- 检查ID:
-
性能优化 对于不常变化的栏目(如主导航),建议使用
currentstyle的缓存功能,或者使用{dede:sql}并配合缓存ID,以减少数据库查询次数,加快页面加载速度。
| 需求场景 | 推荐标签/方法 |
|---|---|
| 调用顶级导航 | {dede:channel type='top'} |
| 调用二级下拉菜单 | {dede:channel type='top'} + {dede:sonchannel} |
| 调用某个栏目的所有子栏目 | {dede:channel typeid='父栏目ID' type='son'} |
| 调用一个具体栏目信息 | {dede:channel typeid='栏目ID'} |
| 复杂排序或自定义字段调用 | {dede:sql sql='...'} |
掌握 {dede:channel} 及其相关标签,是熟练使用织梦CMS进行前台开发的基础,希望这份详细的指南能帮助你解决实际问题!
