我想调用menu_rebuild()函数,但是我不确定确切将代码片段粘贴到何处。
我在本地实例的任何地方都找不到update.php文件。
我想尝试此操作的原因是我删除了所有节点,但它们仍出现在菜单结构下。
/var/www/htdocs/drupal
修改是一个坏主意。您能否添加更多有关为什么要调用menu_rebuild的详细信息?
我想调用menu_rebuild()函数,但是我不确定确切将代码片段粘贴到何处。
我在本地实例的任何地方都找不到update.php文件。
我想尝试此操作的原因是我删除了所有节点,但它们仍出现在菜单结构下。
/var/www/htdocs/drupal
修改是一个坏主意。您能否添加更多有关为什么要调用menu_rebuild的详细信息?
Answers:
创建一个具有以下内容的文件,然后直接放入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();
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
打开数据库架构,然后使用以下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中删除一些选定的记录,但是对于我来说,效果并不理想。
而且,在从表中删除内容之前,请不要忘记备份数据库和站点目录。
几种不同的方式:
menu_rebuild()
从hook_update_N调用drush cc menu
menu_cache_clear_all()
重建菜单缓存
转到admin/config/development/performance
并单击“清除所有缓存”按钮将导致重新构建菜单,以及清除模板,块,页面等缓存。
另一种方法是设置变量:
variable_set('menu_rebuild_needed', TRUE);
这将触发 menu_rebuild();
要修复SQL中的管理菜单,请注意,如上述Valk所述,它将从您的管理管理菜单中删除所有自定义项。运行它之后,清除缓存和管理菜单将被重建为其默认设置。
这是SQL查询:
DELETE FROM menu_links WHERE menu_name='management'