Drupal:如何重建菜单导航

Ala*_*orm 10 drupal drupal-7 drupal-routes

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

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

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

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

Ber*_*dir 10

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

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

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


Kev*_*lly 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();
?>
Run Code Online (Sandbox Code Playgroud)


Eli*_*ynn 5

variable_set('menu_rebuild_needed', TRUE);
Run Code Online (Sandbox Code Playgroud)