Drupal 6でプログラムによってカスタムメニューにメニュー項目を追加しようとしていますが、ほとんど取得しましたが、奇妙な問題が発生しました。コードを使用してメニューに項目を追加できます:drupal_execute('menu_edit_item', $item_array, 'add', NULL, array('menu_name' => $menu_name)); drupal_flush_all_caches();
これは多少機能しますが、リンクがメニューに実際に表示されるようにするには、ページを2回保存するか、ページを保存して[管理]> [パフォーマンス]からキャッシュをクリアする必要があります。キャッシュを2回フラッシュする、またはこれを行うより良い方法はありますか?さらに情報が必要な場合は、私に関連があると思ったものを含めましたが、何かを省略した可能性があります。
あなたが探しているAPIは menu_link_save
。そして、文書化された使用 menu_cache_clear_all
後。
メニュー項目を追加するには、 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;
}
フックの詳細については、 ここ を参照してください。
キャッシュをフラッシュする代わりに menu_rebuild() を試してください。
さまざまなメニュー機能で使用されるデータベーステーブルを(再)入力します。
この関数は、{menu_router}テーブルをクリアしてデータを入力し、新しいルーターアイテムのエントリを{menu_links}に追加して、{menu_links}から古いアイテムを削除します。 update.phpまたはinstall.phpから呼び出された場合、メンテナンスページの環境が異なり、メニューテーブルに古いデータが残るため、menu_execute_active_handler()からの最初の実際のページのロード時に自身への呼び出しもスケジュールされます。