You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Opigno 3用户菜单模板位置查询:需删除不可配置菜单项

Opigno 3 删除硬编码用户菜单元素的解决方案

一、定位硬编码菜单的核心位置

Opigno基于Drupal框架,硬编码的用户菜单通常集中在以下区域:

  • Opigno核心模块:优先排查opigno_user、opigno_core这类核心模块的.module或.theme文件,搜索user_menu、page_attachments、menu_link这类关键词,多数硬编码菜单是在模块内直接构建的。
  • 主题预处理函数:别只局限于模板文件,主题的.theme文件中,hook_preprocess_page()这类函数常用来硬插入菜单元素,比如往页面头部的用户菜单数组中追加项目。
  • 自定义/第三方模块:如果是后期扩展的功能,检查站点内的自定义模块或第三方扩展模块的相关文件。

二、精准定位的实用技巧

  • 安装Devel模块,在页面预处理函数中用kint($variables['page'])打印页面变量,找到用户菜单对应的数组,查看其来源标识,可直接定位到生成菜单的函数或模块。
  • 全局搜索:在站点根目录执行命令 grep -r "你要删除的菜单文本" modules/opigno/,将引号内的内容替换为实际菜单文字,能直接定位到代码所在的文件及行号。
  • Drush工具辅助:执行drush hook-info --group=menu列出所有菜单相关钩子,再搜索这些钩子的实现代码,排查哪个模块在硬编码添加菜单项。

三、删除菜单元素的两种方法

  • 临时修改源码(不推荐):找到硬编码的代码块后,直接注释或删除对应菜单项,但模块更新后修改内容会被覆盖,仅适合临时测试场景。
  • 钩子重写(推荐):创建自定义模块,通过钩子移除菜单元素,不会受模块更新影响:
    • 若为普通菜单链接,使用hook_menu_links_discovered_alter():
      function my_custom_module_menu_links_discovered_alter(&$links) {
        // 替换为目标菜单链接的机器名,可通过Devel查看获取
        unset($links['opigno_user.hardcoded_menu_item']);
      }
      
    • 若为用户页面的标签类本地任务,使用hook_menu_local_tasks_alter():
      function my_custom_module_menu_local_tasks_alter(&$data, $route_name) {
        if ($route_name == 'user.page') {
          foreach ($data['tabs'][0]['output'] as $key => $tab) {
            if ($tab['#link']['title'] == '要删除的菜单文本') {
              unset($data['tabs'][0]['output'][$key]);
            }
          }
        }
      }
      

内容的提问来源于stack exchange,提问作者mr.avatar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:22:24