Drupal 7でmenu_rebuild関数を呼び出すにはどうすればよいですか?


13

menu_rebuild()関数を呼び出したいのですが、コードスニペットを正確に貼り付ける場所がわかりません。

ローカルインスタンスのどこにもupdate.phpファイルが見つかりません。

これを試してみたい理由は、すべてのノードを削除したからですが、それらはまだメニュー構造の下に表示されています。


更新後にDrupalメニューを再構築しますか?
Aboodred1

update.phpはdrupalルートフォルダーにあります。つまり、/var/www/htdocs/drupalそれを変更することは悪い考えです。menu_rebuildを呼び出す理由に関する詳細を追加してください。
GoodSp33d

Aboodred1、はい、すべてのノードを削除した後にdrupalメニューを再構築したいと思います。2- Stroker
58606

@ user12804、これらはノード関連のメニューですか?もしそうなら、私はすでに他の質問で答えました。
シトゥ

回答:


5

次の内容のファイルを作成し、Drupalルートディレクトリにドロップします。言ってみようmenu-rebuild.phphttp://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

15

Drupal 7

drushを使用している場合、次を実行できます。

drush eval 'menu_rebuild();'

動作しない場合は、「PHP致命的エラーが発生したときにメニューを再構築する方法」を参照してください

Drupal 6

drush php-eval 'drupal_rebuild_theme_registry()'

memcached

memcachedを使用している場合は、再起動する必要があります。

Linuxの場合: /etc/init.d/memcached restart

OS X(Homebrewを使用している場合): brew services restart memcached


easelyそれを行うには、正しいdrushコマンド用に投票していますが、間違いなく上@Valkで述べたように前にいくつかのケースでは、あなたが、対応するデータベーステーブルを空にする必要があることを追加する必要があります
nilsun

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

3

いくつかの異なる方法:

  1. コールmenu_rebuild()からhook_update_N
  2. Drupal管理者からメニュー設定フォームを編集して保存します。
  3. コマンドラインから、drushを使用します。 drush cc menu

ありがとうございました。これをブラシなしで行うこともできますか?
user12804

はい、上記の3つの方法はいずれも単独で機能します。
デビッドトーマス

Re:Drupal管理者からメニューリンクを編集して保存します。動作しません。すでに何度か試してみました
...-user12804

はい、それはメニュー設定ページ用でした。menu_cache_clear_all()メニューキャッシュの再構築を呼び出すこともできます
デビッドトーマス

2

行くadmin/config/development/performanceと「クリアすべてのキャッシュ」ボタンをクリックすると、メニューが再構築だけでなく、明確なテンプレート、ブロック、ページ、などのキャッシュ可能になります。


ペンテンのおかげで、何度も試してみましたが、運はありませんでした。削除されたノードは、ナビゲーションメニュー構造にまだ表示されています。(
user12804


0

SQLの管理メニューの使用を修正するには、Valkが上記のように管理管理メニューからすべてのカスタマイズを削除することに注意してください。キャッシュをクリアすると、管理メニューがデフォルト設定に再構築されます。

SQLクエリは次のとおりです。

DELETE FROM menu_links WHERE menu_name='management' 

メニューが再構築されるのは、何かが本当に壊れていて、Drupalが途中で修正できない場合にほとんど必要になります。完全なリセットは、詳細が提供されていない場合にそのような質問に対するより良い答えであるため、Valks方式をお勧めします。
nilsun
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.