web-dev-qa-db-ja.com

プログラムでメニュー項目を追加Drupal 6

Drupal 6でプログラムによってカスタムメニューにメニュー項目を追加しようとしていますが、ほとんど取得しましたが、奇妙な問題が発生しました。コードを使用してメニューに項目を追加できます:drupal_execute('menu_edit_item', $item_array, 'add', NULL, array('menu_name' => $menu_name)); drupal_flush_all_caches();これは多少機能しますが、リンクがメニューに実際に表示されるようにするには、ページを2回保存するか、ページを保存して[管理]> [パフォーマンス]からキャッシュをクリアする必要があります。キャッシュを2回フラッシュする、またはこれを行うより良い方法はありますか?さらに情報が必要な場合は、私に関連があると思ったものを含めましたが、何かを省略した可能性があります。

2
Kyle Piontek

あなたが探しているAPIは menu_link_save 。そして、文書化された使用 menu_cache_clear_all 後。

1
user49

メニュー項目を追加するには、 hook_menu() を使用します。

このフックにより、モジュールはパスを登録して、URLリクエストの処理方法を定義できます。パスは、URL処理用にのみ登録することも、メニュー(通常はナビゲーションメニュー)に配置するリンクを登録することもできます。

例:

function YOUR_MODULE_NAME_menu() {
  $items['a/b/c'] = array(
    'title' => 'Example menu',
    'page callback' => 'example_callback',
    'access arguments' => array('access content'),
    'type' => MENU_NORMAL_ITEM,
    'menu_name' => 'your-custom-menu-name',
  );
  return $items;

}

フックの詳細については、 ここ を参照してください。

1
Hamid Nikmehr

キャッシュをフラッシュする代わりに menu_rebuild() を試してください。

さまざまなメニュー機能で使用されるデータベーステーブルを(再)入力します。

この関数は、{menu_router}テーブルをクリアしてデータを入力し、新しいルーターアイテムのエントリを{menu_links}に追加して、{menu_links}から古いアイテムを削除します。 update.phpまたはinstall.phpから呼び出された場合、メンテナンスページの環境が異なり、メニューテーブルに古いデータが残るため、menu_execute_active_handler()からの最初の実際のページのロード時に自身への呼び出しもスケジュールされます。

0
Scott Joudry