2

Drupal で新しいメニュー (たとえば、mymodule) を有効にすると、Drupal は mymodule_menu (hook_menu) からメニュー項目を取得し、項目を処理して、メニュー項目を menu_router および menu_links テーブルに挿入できるはずです。

しかし、私の Drupal はそうできません。モジュール (私が作成したモジュール、他のユーザーが提供したモジュール、またはコア モジュール) を有効にするたびに、Drupal は新しい情報を取得していないようです。新しく有効化されたモジュールで定義されたメニュー項目は処理されず、Drupal のメニュー システムに挿入されます。つまり、新しく有効化されたモジュールは、アクセスできないため、機能する可能性がないということです。

新しいモジュールのメニュー項目情報を menu_router および menu_links テーブルに手動で挿入することでこれを修正し、新しいメニューが機能し始めました。しかし、モジュールを有効にするたびにこれを行う必要があるとしたら、これは悪夢です。

誰も同じ問題を抱えたことがありますか?これを修正する方法は?

前もって感謝します。

4

2 に答える 2

1

メニューテーブルと対話するために SQL を使用することはありません。間違ったレコードを編集すると、何か問題が発生する可能性があります。

hook_menu コードにエラーがあるはずです。貼り付けできますか?

また、メニュー エントリを持つモジュールを開発している場合、リンクを追加/削除するときに mymodule_init() 内で次の 2 つの関数を呼び出すと便利です。

cache_clear_all()
menu_router_build()

これにより、すべてのキャッシュがフラッシュされ、メニューと hook_menu を呼び出すすべてが再構築されます。その後表示されない場合は、コードにバグがあります。見てみたいです。

于 2010-06-09T17:26:21.047 に答える
0

使用している Drupal のバージョンは報告されていませんが、Drupal 6 ではhook_menu()、場合によっては (たとえば、モジュールがインストールされたとき、またはモジュールの更新が実行されたとき)、 の実装は呼び出されません。

モジュールがメニュー コールバックを変更したが、実行する更新がない場合は、次のコードを含む更新関数を追加できます。

// Change the name of the function to match the module name.
// Change the update number to the correct one for your case.
function custom_module_update_6201() {
  if (!variable_get('menu_rebuild_needed', FALSE)) {
    variable_set('menu_rebuild_needed', TRUE);
  }
}

変数は index.php からチェックされ、その値がTRUEの場合、Drupal は自動的にメニューを再構築します。

于 2010-06-17T03:20:23.077 に答える