织梦如何调用栏目子栏目列表
channel
子栏目
导航菜单
典型应用场景
企业站常见的「关于我们」下挂「公司简介、企业文化、联系方式」三个子栏目;产品中心下挂若干产品分类。在父栏目页或首页,往往需要把这些子栏目列出来,方便用户和搜索引擎快速跳转。
使用 channel 标签调用子栏目
核心是 {dede:channel} 标签,typeid 指定父栏目 ID,type='son' 表示只取直接子栏目:
{dede:channel type='son' typeid='1' row='10'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
type 参数取值
type='top':顶级栏目type='son':指定栏目的下级栏目(默认值)type='self':同级栏目type='sun':同 son,1.x 老语法
当前栏目的子栏目(自动获取typeid)
在列表页/封面页,可以用 typeid='@me' 或不写 typeid,让织梦自动取当前栏目:
{dede:channel type='son' currentstyle="
<li class='active'><a href='~typelink~'>~typename~</a></li>"}
<li><a href='[field:typelink/]'>[field:typename/]</a></li>
{/dede:channel}
currentstyle 用于高亮当前选中栏目,~typelink~、~typename~ 是占位符。
效果演示
调用子栏目并附文章数
想在每个子栏目后显示文章数量,可用 {dede:sql} 直接查库:
{dede:sql sql="SELECT typename,typedir,
(SELECT COUNT(*) FROM dede_archives WHERE typeid=t.id) AS cnt
FROM dede_arctype t WHERE reid=1 ORDER BY sortrank"}
<li>
<a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]">
[field:typename/] ([field:cnt/])
</a>
</li>
{/dede:sql}
三级菜单:channelartlist
需要输出多级菜单时,{dede:channelartlist} 是更强大的方案,可以嵌套子标签:
<ul class="nav">
{dede:channelartlist typeid='top' row='10'}
<li>
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
<ul class="sub">
{dede:channel type='son' noself='yes'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
</li>
{/dede:channelartlist}
</ul>
注意:
noself='yes' 表示不输出当前栏目本身,否则在子栏目页会出现重复。
获取子栏目缩略图
栏目编辑里可以上传「栏目图片」litpic 字段,模板中用:
{dede:channel type='son' typeid='1'}
<a href="[field:typelink/]">
<img src="[field:litpic/]" alt="[field:typename/]">
<span>[field:typename/]</span>
</a>
{/dede:channel}
常见坑:栏目 typedir 出现 {cmspath}
直接输出 [field:typedir/] 会带上 {cmspath},应改用 [field:typelink/],它会自动拼接完整 URL。
落地建议
把多级菜单封进一个 nav.htm 公共文件,首页、列表页、内容页统一引入。上线后建议在百度站长平台抓取诊断一次,确认所有子栏目链接都能被正常抓取。栏目层级不要太深,理想是「首页 → 一级 → 二级」三层结构,超过三层不仅用户难找,权重传递也会被稀释。定期清理空栏目,保证每条子栏目都有内容支撑,菜单才不会变成「空架子」。