web-dev-qa-db-ja.com

プログラムによって、一部のコンテンツ領域で新しいメニューブロックを作成および設定する方法

プログラムで新しいメニューを作成し、いくつかの要素をプログラムで追加して、ブロックとしてコンテンツ領域でアクティブ化したいと考えています。

これをプログラムでどのように実行できますか?

既存のメニューに新しい要素を追加する方法は知っていますが、新しいメニューを作成する方法がわかりません。

1
Ek Kosmos

menu_saveを使用してメニューを保存します。

$menu = array(
  'menu_name' => '',
  'title' => '',
  'description' => '',
);
menu_save($menu);

ブロックをアクティブにするAPI関数があるかどうかはわかりませんが、ブロックテーブルに行を挿入することで実行できます。モジュール、デルタ、テーマ、リージョンを知る必要があります。メニューの場合、メニューモジュールは、メニュー名をデルタとしてメニューを作成します。

したがって、上記を使用すると、次のようなことができます。

$menu_block = array(
  'module' => 'menu',
  'delta' => $menu['menu_name'],
  'theme' => '', // Either get the active theme or you can do it for all themes
  'region' => 'content', // Where you want to place it, theme dependant
  'status' => 1,
);

したがって、それを行うことはできますが、おそらくこのテーマを特定のものにするか、またはインストールプロフィールでこれを行う必要があります。この場合、どのテーマをアクティブにする必要があるかがわかります。

3
googletorp

数日前に同様の質問がありました。 hook_menuを使用してモジュールで通常行うようにメニューを作成し、hook_installを使用して新しいメニューを作成できます。

 $items['devel/cache/clear'] = array(
  'title' => 'Empty cache',
  'page callback' => 'devel_cache_clear',
  'description' => 'Clear the CSS cache and all database cache tables which store page, node, theme and variable caches.',
  'access arguments' => array('access devel information'),
  'menu_name' => 'devel',
);

独自のメニューを持つカスタムモジュール?

0
oranges13