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

修改Drupal菜单类型后仍无法隐藏面包屑子菜单项路径的问题

解决Drupal子菜单项面包屑隐藏问题

看起来你已经找对了核心方向——MENU_NORMAL_ITEM确实是MENU_VISIBLE_IN_TREE | MENU_VISIBLE_IN_BREADCRUMB的组合,改成MENU_VISIBLE_IN_TREE理论上应该让子项只在菜单树显示,不出现面包屑。但没生效的话,大概率是以下几个你可能忽略的点:

1. 显式设置父菜单项关联

你的子菜单项代码里没有显式指定parent参数,虽然Drupal会尝试通过URL路径推断父子关系,但这种自动推断偶尔会出问题(尤其是缓存没彻底刷新的时候)。给每个子菜单项加上parent和menu_name参数,明确关联到主菜单:

$items['what-to-expect/0'] = array(
  'title' => t('Local Event'),
  'page callback' => 'pvmf_layout_what_to_expect_0',
  'access arguments' => array('access content'),
  'type' => MENU_VISIBLE_IN_TREE,
  'weight' => 0,
  'parent' => 'what-to-expect', // 显式绑定父菜单项
  'menu_name' => 'main-menu', // 和主项保持一致的菜单名称
);
// 另外两个子菜单项同理添加parent和menu_name字段

2. 彻底清除所有缓存

后台Performance页面的缓存清除有时候不够彻底,尤其是菜单系统的缓存。如果是Drupal 7,试试用Drush命令强制清空所有缓存:

drush cc all

如果是Drupal 8及以上版本:

drush cr

没有Drush的话,可以手动删除sites/default/files/cache目录下的所有文件(注意保留.htaccess和index.html)。

3. 检查自定义面包屑模块的干扰

如果你安装了Path Breadcrumbs、Custom Breadcrumbs这类模块,它们会完全接管面包屑的生成逻辑,忽略默认的菜单类型设置。可以暂时禁用这些模块测试,或者进入模块配置页面,检查是否为子页面设置了强制显示面包屑的规则。

4. 排查主题的自定义面包屑实现

有些主题会在template.php(Drupal 7)或者.theme文件(Drupal 8+)中重写theme_breadcrumb函数,硬编码面包屑生成逻辑,完全不参考菜单的type设置。你可以:

  • 打开主题相关文件,搜索breadcrumb关键词,查看是否有自定义代码;
  • 暂时切换回默认主题(比如Bartik)测试,确认是不是主题的问题导致面包屑规则失效。

5. 手动触发菜单重建

修改hook_menu之后,菜单系统可能需要手动触发重建。进入Structure > Menus > Main menu,点击「Save configuration」按钮,强制菜单树重新生成。

按照上面的步骤排查,应该就能解决面包屑显示子项路径的问题了。

内容的提问来源于stack exchange,提问作者iamyourfriend

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:16:02