crear menus en drupal con hook_menu
Posted Agosto 9th, 2008 by oskar
Con este código invocamos al hook de drupal para poder crear los elementos de menu.
Con estas tres líneas de código cerramos el if del principio, y la función campanya.
Cuando queremos crear uno o más elementos de menú en Drupal tenemos que añadir la siguientes líneas de código:
<?php
function campanya_menu($may_cache) {
$items = array();
if ($may_cache) {
?>Con este código invocamos al hook de drupal para poder crear los elementos de menu.
<?php
$items[] = array(
'path' => 'alta_partida',
'title' => t('Alta de partidas'),
'description' => t('Informar de los resultados de partidas'),
'callback' => 'drupal_get_form',
'callback arguments' => array('alta_partida'),
'access' => user_access ('administer site configuration'),
'type' => MENU_NORMAL_ITEM
);
$items[] = array(
'path' => 'alta_partidados',
'title' => t('Alta de partidasdos'),
'description' => t('Informar de los resultados de partidassss'),
'callback' => 'drupal_get_form',
'callback arguments' => array('alta_partidados'),
'access' => user_access ('administer site configuration'),
'type' => MENU_NORMAL_ITEM
);
?>Cada array dentro de la variable $items es un elemento que queremos crear, para más información sobre los diferentes elementos / atributos de los $items del hook_menu consultar http://api.drupal.org/api/function/hook_menu/5
<?php
}
return $items;
}
?>Con estas tres líneas de código cerramos el if del principio, y la función campanya.
Lo dicho, cada vez que queramos crear nuevos elementos de menu simplemente añadir un $item[].
Un saludo
Oskar
Trackback URL for this post:
http://www.documentados.com/trackback/158
Delicious
meneame
documenea

Theme aberdeen-liquid. Configuración y administración del sitio
Comentarios
$may_cache or no $may_cache esa es la cuestión
Kaixo oskar.
Buen post, la verdad que es uno de los hooks mas interesantes de drupal y con mas potencia en comparación con otros gestores de contenido.
Como apunte, decir que drupal gestiona los menús con un sistema de cache. Por eso la variable $may_cache, cada elemento de menu ($items[]) es cacheado por drupal almacenadolo en la tabal cache_menu. Esto es bueno ya que una vez creado un elemento en tu módulo no tiene que hacer otra vez todas las consultas, optimizando nuestro drupal.
También se pude hacer lo contrario, crear un elemento de menú fuera de la estructura de control "if ($may_cache) { ", Esto es interesante cuando quieres que parte del menú no sea fijo, un ejemplo lo podemos ver en en el modulo imce. Pongo algun comentario en el código.
<?php
$items = array();
if ($may_cache) {
$items[] = array('path' => 'imce/browse',
'title' => 'IMCE browse',
'access' => user_access('access imce'),
'callback' => 'imce_browse',
'type' => MENU_CALLBACK,
); //seguiría el resto de elementos de menú
}
elseif (arg(0)=='user' && ($uid=arg(1)) && is_numeric($uid)) {
if ($user->uid == $uid) {
$access = user_access('access imce');
$acc = $user;
}
elseif (user_access('administer imce') && $uid!=1 && $acc=user_load(array('uid'=>$uid))) {
$access = array_intersect(user_roles(0, 'access imce'), $acc->roles);
}
//dependiendo de esta condición (en resumen que seas usuario) creará un menú diferente para cada usuario 'user/'.$uid.'/imce',
if ($access) {
$items[] = array('path' => 'user/'.$uid.'/imce',
'title' => t('Personal files'),
'access' => TRUE,
'callback' => 'imce_user_page',
'callback arguments' => array($acc),
'type' => MENU_LOCAL_TASK,
'weight' => 10,
);
}
}
?>
Con el sistema de cache es interesante usar el modulo devel en el desarrollo de módulos ya que tiene la opción de borrar cache o en su defecto usar la función cache_clear_all, sino te puedes volver un poco "miko".
Salud
Gracias Karlos, que me digas
Gracias Karlos, que me digas que es un buen post me llega de orgullo y ganas de seguir currando con Drupal.
A ver si esta semana tengo tiempo para preparar el post de los form multipage, que es la siguiente parte.
Un saludo
Oskar
Pero esto es de Drupal 5, no??
Para Drupal 6 han rediseñado completamente el sistema de menus más sencillo y potente:
http://drupal.org/node/103114
Saludos
Roberto M. Oliva
Buenas Roberto.La verdad es
Buenas Roberto.
La verdad es que no me he parado a mirar detalladamente como funcionan los menús en D6, espero tener tiempo para hacerlo en breve.
Gracias por el comentario.
Oskar
pd: si esto d5
Enviar un comentario nuevo