Drupal 7管理菜单栏异常显示多余项及内容类型名称问题求助
解决Drupal 7管理菜单重复项与内容类型名称异常显示问题
我碰到过好几次Drupal 7管理菜单出现这类异常的情况,结合你的描述(跨浏览器、无报错日志),大概率是菜单注册冲突、缓存异常或者主题/模块的自定义代码导致的,给你几个逐步排查的方案:
1. 排查模块冲突或重复注册
- 先检查是否有重复启用的模块,尤其是和文件导入、内容显示相关的模块(比如Feeds、File Entity,或者你自己开发的自定义模块)。有些模块会重复注册相同路径的菜单项,导致菜单显示重复。你可以这样操作:
- 进入模块管理页面(路径:
/admin/modules),先临时禁用所有非核心模块,然后刷新管理菜单看看问题是否消失。如果消失了,再逐个重新启用模块,每次启用后检查菜单,找到触发问题的那个模块。
- 进入模块管理页面(路径:
- 如果你有自定义模块,打开模块的
.module文件,搜索hook_menu()函数,确认里面有没有重复定义「import files」或「manage display」的菜单项——比如两个模块都注册了admin/content/file/import路径,就会导致重复显示。
2. 清理缓存并重建菜单路由
Drupal的菜单缓存偶尔会抽风,即使没有报错也可能导致菜单显示混乱:
- 进入性能设置页面(路径:
/admin/config/development/performance),点击「清空所有缓存」,然后刷新页面看看菜单是否恢复正常。 - 如果清空缓存没用,要是你装了Drush,直接在终端执行
drush menu-rebuild重建菜单路由;没装Drush的话,可以在自定义模块里临时加一行menu_rebuild()代码,执行一次后删掉就行。
3. 检查主题的菜单预处理代码
有些主题会通过hook_menu_link_alter()或者hook_preprocess_menu()来修改菜单显示,可能不小心导致菜单项重复或者把内容类型名称错误加到菜单前端:
- 打开当前主题的
template.php文件,搜索有没有修改菜单的预处理函数,看看是不是有代码在遍历菜单时重复添加了条目,或者错误地把内容类型名称插在了菜单最前面。 - 临时切换到核心主题(比如Bartik),如果问题消失了,那肯定是当前主题的代码有问题,针对性排查就行。
4. 检查内容类型的菜单配置
新建内容类型后名称出现在菜单前端,大概率是内容类型的菜单配置出了问题:
- 进入该内容类型的编辑页面(路径:
/admin/structure/types/manage/[你的内容类型机器名]),找到「菜单设置」部分,看看是不是误把内容类型名称设成了顶级菜单项,或者有没有模块自动给内容类型添加了菜单条目。 - 也可以检查下是否有类似Menu Item Extras这类模块,在内容类型创建时自动注册了顶级菜单,导致名称出现在管理菜单前端。
5. 排查数据库菜单表的异常条目
如果前面的方法都没用,那可能是数据库里的菜单表(menu_links、menu_router)出现了重复条目:
- 用phpMyAdmin或者数据库客户端打开
menu_links表,搜索link_title为「import files」或「manage display」的条目,看看是不是有相同路径或者重复的mlid条目。如果有,备份数据库后手动删除重复的条目,然后重建菜单缓存。
内容的提问来源于stack exchange,提问作者Alex Creamer
相关产品推荐
相关产品推荐

