Drupal:如何重建菜单导航

时间:2011-03-03 18:23:03

标签: drupal drupal-7 drupal-routes

在Drupal 7.0中,当我将路由路径/菜单从类型MENU_NORMAL_ITEM更改为类型MENU_CALLBACK时,Drupal 7.0不会从menu_links表中删除该项目。我不确定这是不是错误,但我filed one with the core team

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

我知道我可以重命名单个菜单路径,清除缓存/刷新,然后将该项目命名为刷新任何单独的路由/菜单链接。我正在寻找一个可以运行的单个命令(或者可以调用的函数或一组命令)和知道所有的菜单导航都是最新的,而不用担心我已经给了其他部分系统搞乱内部。

这是否存在?如果你要提到drush或devel,你很棒,但是我对这些工具的具体说明就是我所追求的。

8 个答案:

答案 0 :(得分:10)

请注意,虽然有重建菜单的选项(请参阅其他答案),但这些选项可能会或可能不会用于清除菜单链接的问题。

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

正如另一个问题所述,这两个系统之间的紧密耦合可能会在D8中发生变化,因此您必须从菜单路由器项目中单独声明菜单链接。

答案 1 :(得分:7)

当您无法访问该站点或未安装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();
?>

答案 2 :(得分:4)

variable_set('menu_rebuild_needed', TRUE);

答案 3 :(得分:3)

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

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

return array(); // $物品;

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

有很多方法可以做到,但最好的方法是使用devel模块。 启用模块后,转到块并在您的侧栏上启用devel块。 然后参考图像中的红框

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

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

答案 6 :(得分:0)

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

在该页面内会出现重建菜单选项。

答案 7 :(得分:0)

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

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