12

在 Drupal 7.0 中,当我将路由路径/菜单从 MENU_NORMAL_ITEM 类型更改为 MENU_CALLBACK 类型时,Drupal 7.0 不会从menu_links表中删除该项目。我不确定这是否是一个错误,但我已经向核心团队提交了一个

有了这个上下文,有没有办法强制 Drupal 重建它的所有导航菜单?即使我在更改菜单项后清除了 Drupal 的缓存,我上面描述的错误也会发生。

我知道我可以重命名单个菜单路由,清除缓存/刷新,然后重新命名该项目以刷新任何单个路由/菜单链接。我正在寻找一个我可以运行的命令(或要调用的函数,或一组命令)并且知道所有菜单导航都是最新的,而不用担心我已经通过弄乱内部部件来冲洗系统的其他部分。

这存在吗?如果您要提及 drush 或 devel,那您很棒,但我所追求的是有关这些工具的具体说明。

4

8 回答 8

11

请注意,尽管有重建菜单的选项(请参阅其他答案),但这些可能会或可能不会用于清理menu links的问题。

重建菜单只是重建菜单路由项和菜单链接,只要它们是基于菜单路由项自动生成的。存在已知问题,例如重新设置菜单链接(http://drupal.org/node/550254)。如果菜单链接已被自定义或手动添加(或 Drupal 认为它们已被更改..),那么这些将不会被触及。

正如已经在另一个问题中提到的,这两个系统之间的紧密耦合可能会在 D8 中改变,因此您必须将菜单链接与菜单路由器项分开声明。

于 2011-03-03T19:34:22.220 回答
8

当您无法访问该站点或未安装 Devel 或 Drush 时,这是另一种选择。创建一个诸如rebuild.php 之类的文件并将其放在您的Drupal 根目录中(尽管这并不重要,因为chdir 将切换到指定的Drupal 根目录)。然后在您访问该脚本后,它应该重建菜单,然后一切都应该在网站上运行良好。

<?php
  // Bootstrap
  // Change chdir to the full path of your Drupal root
  chdir('/home/myusername/public_html/');
  define('DRUPAL_ROOT', getcwd());
  require_once './includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

  // Rebuild
  menu_rebuild();
?>
于 2011-08-02T12:32:26.683 回答
5
variable_set('menu_rebuild_needed', TRUE);
于 2013-05-01T20:36:39.690 回答
4

我遇到了同样的问题。我从 MENU_NORMAL_ITEM 切换到 MENU_CALLBACK 并且无法摆脱导航块中的菜单项。我尝试了上面的几个解决方案,但没有成功。对我有用的是在 hook_menu 中注释掉我的菜单项,清除缓存,重新启用它们并再次清除缓存。

这是我在 Hook_menu 中返回以清除所有菜单项的内容:

返回数组();//$项目;

于 2013-07-11T20:50:17.110 回答
3

访问模块列表页面通常会重建菜单。

您也可以尝试安装Dev模块 启用 dev 块并且您有重建菜单的链接。

于 2011-03-03T18:35:41.567 回答
2

有很多方法可以做到这一点,但最好的方法是使用 devel 模块。启用模块后,转到块并启用侧栏上的开发块。然后参考图片中的红框

http://cyrve.com/screenshots/devel_theme_snap-20080113-205127.jpg

它有一个清除菜单缓存的选项。块的位置将取决于您放置块的位置。

于 2011-03-03T20:13:55.113 回答
1

如果您安装了开发模块,您可以转到菜单配置页面 ( /admin/build/menu ),然后选择开发菜单。

在该页面内将出现一个重建菜单选项。

于 2011-03-03T19:13:46.350 回答
1

在 D7 中,菜单配置页面已移至 admin/structure/menu/ 。

这个小技巧是让菜单路由器重建而不用另一个块弄乱 UI 的好方法。

于 2012-06-07T21:59:16.597 回答