如何在MODX Evolution的DLmenu中添加自定义锚点链接
不用搞复杂的筛选器配置,直接在DLmenu绑定的菜单模板上改就行,是成本最低的实现方式。
具体操作步骤
- 先找到你调用DLmenu时
&tpl参数绑定的菜单项模板Chunk,常见命名比如dlmenu_item、main_menu_item这类,就是控制单个菜单项输出代码的块。 - DLmenu循环输出菜单项的时候自带从1开始计数的迭代变量,直接在单个菜单项的输出代码后面加个位置判断,就能在指定位置插入自定义内容,不用改Snippet核心、也不用加额外钩子。
- 参考修改代码:
<!-- 保留原有菜单项的输出逻辑,不要动 --> <li[+wf.classes+]> <a href="[+wf.link+]" [+wf.attributes+]>[+wf.linktext+]</a> [+wf.wrapper+] </li> <!-- 在原有代码后面追加判断,第2个菜单项输出完就插入自定义锚点 --> [+if:eq=`[+wf.iteration+]`:is=`2`:then=` <li class="menu-item"> <a href="[(site_url)]#top">返回首页顶部</a> </li> `+]
- 几个注意点:
- 要是你用的DLmenu版本比较新,
[+wf.iteration+]不生效的话,换成[+dl.iteration+]就行,逻辑完全一样 [(site_url)]是MODX Evolution自带的系统标签,自动输出站点首页地址,后面的#top换成你实际用的首页锚点ID就可以- 自定义li标签的class名照着现有菜单项的类名写,就能直接复用原有导航的样式,不用额外调CSS
- 要是你用的DLmenu版本比较新,
关于筛选器实现的说明
确实也可以通过DLmenu的&filters参数写自定义筛选逻辑插入虚拟链接,但这种方式需要额外写PHP钩子匹配插入位置,后续要是调整菜单排序、增减菜单项,维护起来比模板判断麻烦很多,没有特殊需求完全没必要用。
内容的提问来源于stack exchange,提问作者Alexey
相关产品推荐
相关产品推荐

