it-swarm-es.com

Cómo crear y establecer un nuevo bloque de menú en alguna región de contenido, mediante programación

Quiero crear un nuevo menú, agregarle algunos elementos mediante programación y activarlo en alguna región de contenido como un bloque.

¿Cómo puedo hacer esto mediante programación?

Sé cómo agregar nuevos elementos a un menú existente, pero no sé cómo crear un nuevo menú.

1
Ek Kosmos

Guarde el menú usando menu_save:

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

No estoy seguro de si hay una función api para activar un bloque, pero se puede hacer insertando una fila en la tabla de bloques. Necesita conocer el módulo, delta, tema y región. Para los menús, el módulo de menú creará uno con el delta como nombre_menú.

Entonces, con lo anterior, podría hacer algo como esto:

$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,
);

Entonces, si bien puede hacerlo, probablemente desee hacer que este tema sea específico, o hacerlo en un perfil de instalación, donde sepa qué tema debe ser el activo, etc.

3
googletorp

Hace unos días tuve una pregunta similar. Puede hacer el menú como lo haría normalmente en un módulo usando hook_menu y luego crear el nuevo menú usando 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',
);

¿Módulo personalizado con su propio menú?

0
oranges13