导航菜单是织梦模板中最先被访问者看到的部分,也是搜索引擎抓取站点结构的入口。手工写死菜单链接虽然简单,但每次新增栏目都要改模板,维护成本极高。使用织梦内置的导航菜单自动生成标签,可以让菜单跟随栏目结构实时变化,本文围绕 channel 标签与多级菜单生成展开。
一、channel 标签基础写法
channel 是织梦用来调取栏目标签的核心标签,常用于顶部导航、底部栏目地图、侧栏分类。最简单的顶部导航写法:
<ul class="nav">
<li><a href="/">首页</a></li>
{dede:channel type='top' row='10' currentstyle="<li class='on'><a href='~typelink~'>~typename~</a></li>"}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
关键参数说明:
type='top':只调用顶级栏目;type='son'调用子栏目;type='self'调用同级栏目row='10':调用数量currentstyle:当前栏目高亮样式,~typelink~、~typename~为占位符
二、多级下拉菜单生成
织梦 channel 标签默认只输出一级,要做二级下拉需用 channelartlist 标签嵌套。channelartlist 会同时输出栏目信息和子栏目列表:
{dede:channelartlist typeid='top' row='10'}
<li class="has-sub">
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
{dede:field name='typeid' runphp='yes'}
global $dsql;
$sql="SELECT * FROM dede_arctype WHERE reid=@me AND ishidden=0 ORDER BY sortrank";
@me=$dsql->GetOne($sql) ? "<ul class='sub'>" : '';
{/dede:field}
{dede:channel type='son' noself='yes'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
{dede:field name='typeid' runphp='yes'}@me=@me ? '</ul>' : '';{/dede:field}
</li>
{/dede:channelartlist}
这种写法能根据是否有子栏目动态输出 <ul> 标签,避免出现空的下拉。
三、菜单排序与隐藏控制
channel 默认按 sortrank 升序排列,可在"后台 - 网站栏目管理"中调整栏目排序值控制菜单顺序。若某些栏目不想出现在导航,可设置栏目为"隐藏":ishidden=1,channel 标签会自动过滤。
如需让导航包含单页(关于我们、联系方式等),可改用 channelartlist 并配合 type='single' 或在 SQL 中 union 单页表。
四、注意事项
channel 标签的
typeid 不填默认从当前页上下文取,首页调用需显式指定 typeid='top'。多级菜单在前台依赖 CSS 与 JS 控制显示,记得给
.has-sub 绑定 hover 或 click 事件。栏目链接
[field:typelink/] 已包含相对路径,移动模板时无需改写。导航数量过多会撑破布局,建议控制在 8 个以内,超出部分归入"更多"下拉。
五、后续优化方向
掌握织梦导航菜单自动生成标签后,建议结合用户访问热力图调整栏目排序,把高频访问的栏目前置。同时为菜单链接加上 title 属性、为当前栏目增加结构化数据标记,让导航既服务于用户体验也服务于搜索引擎理解站点结构。对于营销型站点,可在导航中嵌入转化入口(在线咨询、预约按钮),把每一次菜单点击都引导到业务目标,让导航从单纯的"找路工具"升级为流量调度枢纽。