如何在Drupal 7中调用menu_rebuild函数?


13

我想调用menu_rebuild()函数,但是我不确定确切将代码片段粘贴到何处。

我在本地实例的任何地方都找不到update.php文件。

我想尝试此操作的原因是我删除了所有节点,但它们仍出现在菜单结构下。


您要在更新后重建Drupal菜单还是什么?
Aboodred1

update.php将在drupal根文件夹中,即进行/var/www/htdocs/drupal修改是一个坏主意。您能否添加更多有关为什么要调用menu_rebuild的详细信息?
2013年

Aboodred1,是的,我想在删除所有节点后重建drupal菜单。2-Stroker,drupal.stackexchange.com
questions

@ user12804,您确定它们是与节点相关的菜单吗?如果是这样,我已经回答了另一个问题。
锡胡2013年

Answers:


5

创建一个具有以下内容的文件,然后直接放入Drupal根目录。比方说menu-rebuild.php。运行它http://example.com/menu-rebuild.php

<?php
error_reporting(E_ALL);
define('DRUPAL_ROOT', getcwd());
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

menu_rebuild();

使用Devel可能更容易运行此程序
mbomb007 '19

15

Drupal 7

如果您使用的是drush,则可以运行:

drush eval 'menu_rebuild();'

如果不起作用,请参阅:发生PHP致命错误时如何重建菜单?

Drupal 6

drush php-eval 'drupal_rebuild_theme_registry()'

记忆快取

如果您使用的是memcached,则必须重新启动它。

在Linux上: /etc/init.d/memcached restart

在OS X上(如果使用Homebrew): brew services restart memcached


投票赞成正确的drush命令可以轻松地做到这一点,但是您绝对应该添加一点,在某些情况下,您需要先清空相应的数据库表,如上述@Valk所述
nilsun 2014年

11

打开数据库架构,然后使用以下SQL查询删除menu_links和menu_router表的所有内容:

DELETE FROM menu_links;
DELETE FROM menu_router;

然后运行http://example.com/update.php。它将调用menu_rebuild(),它将使用“新”数据填充这些表。在“ PHP致命错误:内存不足”将我的某些菜单弄得一团糟之后,它为我工作。

但是请注意,它将清除您必须手动重建的所有自定义菜单。为了避免这种情况,您可能需要从menu_router和menu_links中删除一些选定的记录,但是对于我来说,效果并不理想。

而且,在从表中删除内容之前,请不要忘记备份数据库和站点目录。


2
为所需的其他信息投票,有时您肯定需要在menu_rebuild之前清空相应的数据库表。这是从长期的经验中证实的……
nilsun 2014年

3

几种不同的方式:

  1. menu_rebuild()hook_update_N调用
  2. 从Drupal管理员编辑并保存菜单设置表单。
  3. 在命令行中,使用drush: drush cc menu

谢谢。我也可以不加急地这样做吗?
user12804

是的,以上3种方法中的任何一种都可以单独使用。
大卫·托马斯

回复:编辑并保存Drupal管理员的菜单链接。不起作用,已经尝试了几次...
user12804 2013年

是的,那个是用于菜单设置页面的。您也可以拨打menu_cache_clear_all()重建菜单缓存
大卫·托马斯

2

转到admin/config/development/performance并单击“清除所有缓存”按钮将导致重新构建菜单,以及清除模板,块,页面等缓存。


感谢彭滕,我尝试了几次,但是没有运气。删除的节点仍显示在导航菜单结构中:(
user12804 2013年


0

要修复SQL中的管理菜单,请注意,如上述Valk所述,它将从您的管理管理菜单中删除所有自定义项。运行它之后,清除缓存和管理菜单将被重建为其默认设置。

这是SQL查询:

DELETE FROM menu_links WHERE menu_name='management' 

当某些东西真的坏了并且Drupal无法在中间修复它时,重建菜单通常变得很必要。这就是为什么我宁愿建议使用Valks方法的原因,因为如果没有提供更多详细信息,则完全重置对于此类问题会是一个更好的答案。
nilsun 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.