crear menus en drupal con hook_menu

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

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

El contenido de este campo se mantiene como privado y no se muestra públicamente.
CAPTCHA
Esto es para evitar spam, y ver que eres humano :)
8 + 10 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.

Back to top