May 252011
 

Post to Twitter Post to Facebook


En el artículo anterior “How works the menu system in Drupal 7” veíamos como trabajaba Drupal para procesar una URL y generar una respuesta.En este artículo crearemos un nuevo menu item básico al cual iremos añadiendo en artículos posteriores nuevas funcionalidades aumentando su complejidad.

Primeros pasos

Para desarrollar cualquier módulo en drupal debemos crear nuestro directorio en sites/all/modules/custom un directorio , en nuestro caso /menufun y creamos tres ficheros : menufun.info , menufun.module y menufun_greeting.inc

NOTA:El directorio custom ha sido creado para diferenciar los módulos desarrollados por nosotros mismos de los desarrollados por la comunidad de drupal.

Ahora toca “aporrear el teclado”, en menufun.info describimos nuestro nuevo módulo:


name = Menu Fun
description = Learning about the menu system.
package = Pro Drupal Development
core = 7.x
files[] = menufun.module
Implementando hook_menu() y su page callback.

Usaremos el hook hook_menu() para definir nuestro array de elementos que serán añadidos al menu, por tanto el siguiente paso será definir nuestro hook dentro de menufun.module :


<?php

/**
 * @file
 * Use this module to learn about Drupal´s menu system
 */

/**
 * Implementation hook_menu().
 */
 function menufun_menu() {
 $items['menufun'] = array(
 'title' => 'Menu Fun',
 'page callback' => 'menufun_greeting',
 'page arguments' => array('Jane', 'Doe'),
 'file' => 'menufun_greeting.inc',
 'access callback' => TRUE,
 'type' => MENU_NORMAL_ITEM,
 'weight' => -1,
 );

 return $items;
 }

Según nuestra implementación del hook_menu() hemos definido un elemento de menu (menufun) con las siguientes características :

  • Título : Menu fun
  • Page callback asociada : menufun_greeting
  • File (Añade ficheros externos) : menufun_greeting.inc
  • Mediante “page arguments” establecemos dos parámetros que se le pasarán a nuestra callback.Cabe destacar que cualquier parámetro pasado por la URL será enviado igualmente a la callback definida anteriormente, de tal forma que si no definiéramos ningún argumento pero usamos la url http://example.com/menufun/Jane/Doe  los parámetros Jane y Doe se enviarían igualmente ,¡Pruebalo! .Los argumentos se usan mas comúnmente en casos donde debemos controlar más específicamente que parámetros enviar a la callback.
  • No hemos establecido ningún control de acceso.
  • Hemos definido este elemento para que aparezca en el menu navigation.

Por último abrimos el fichero menufun_greeting.inc donde definiremos el callback menufun_greeting:


<?php

/**
 * Page callback
 */
function menufun_greeting($first_name = '', $last_name = ''){
 return t('Hello @first_name @last_name', array('@first_name' => $first_name, '@last_name' => $last_name));
}

Viendo los resultados y conclusiones

Finalmente podemos ver los resultados , habilitamos nuestro módulo , limpiamos la cache y podemos comprobar como en el menu navigation aparece nuestro menu item.Si pulsamos sobre él se activará nuestra callback obteniendose el siguiente resultado:

Como conclusión podemos decir que definir elementos menu en Drupal 7 es muy fácil gracias a la API que nos ofrece este CMS, simplemente tenemos que implementar hook_menu() y su callback asociada.

En artí­culos posteriores partiremos de este módulo e iremos enriqueciendo nuestro menu item.

Fuente: Pro Drupal 7 Development

  7 Responses to “Cómo crear un menu item básico en Drupal 7”

  1. Pero una vez hecho, como consigo que se muestre?

    gracias

  2. Si has seguido correctamente el tutorial deberías poder ver en tu menu de navegación del enlace a “Menu fun” como muestra la última imagen. Si no es así te recomiendo que limpies la caché y habilites de nuevo el módulo, haciendo eso no debería tener ningún problema. :-)

  3. Genial! Por fin he conseguido que uno tire, muchas gracias. Mira que lo intentado con otro, y, o bien no me mostraba el modulo, o me da un warning de permisos denegado (con un ejemplo de annotate) :S

    Me ha sido de mucha ayuda para poder empezar a comprender como se crea un modulo. :-D

  4. Logre habilitar el modulo pero a la hora de que se guarda y al darle en la pagina de inicio aparece en la parte de arriba este mensaje.

    /** * @file * Use this module to learn about Drupal�s menu system */ /** * Implementation hook_menu(). */ function formucliente_menu() { $items['formucliente'] = array( ‘title’ => ‘Formulario Cliente’, ‘page callback’ => ‘formucliente_greeting’, ‘page arguments’ => array(‘Jane’, ‘Doe’), ‘file’ => ‘formucliente_greeting.inc’, ‘access callback’ => TRUE, ‘type’ => MENU_NORMAL_ITEM, ‘weight’ => -1, ); return $items; }

    espero me puedan ayudar, nota le puse un nuevo nombre llamado formucliente en lugar de menufun.

  5. Tu tutorial es de gran ayuda para mi :)
    Muchas gracias
    :D

  6. Gracias Me Funciono a la perfeccion , me gustaria saber si tienes mas post …. gracias

  7. Buenas Bellido,

    Gran aporte, refresco rápido de temas muy importantes.

    Un saludo,

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>