May 232011
 

Post to Twitter Post to Facebook

Este es el primero de una serie de artículos donde aprenderemos a trabajar con la API de Drupal 7 en lo referente a los menus, the menu system.

El menu system tiene responsabilidades básicas :

  • Callback mapping.
  • Control de acceso.
  • Personalización de menu.

El código esencial del menu system se encuentran en includes/menu.inc ,mientras que el código opcional sobre algunas características se encuentra en modules/menu, por ejemplo la personalización de menus.

Asignando URLs a funciones :

Antes de desarrollar cualquier ejemplo , en primer lugar debemos entender cómo drupal procesa las URLs y cómo maneja las peticiones (request) y emitir una respuesta.

El enfoque general es el siguiente: Drupal pregunta a los módulos habilitados para conseguir un array de menu items.Cada menu item consiste en un array clave-valor donde a cada path (clave) le corresponde una serie de información asociada (valor) a dicha path.Uno de los datos asociados a una path que debemos definir es la page callback asociada a la path, la cual simplemente consiste en una función PHP que se ejecutará cuando el navegador solicite cierta path.Este proceso lo podemos describir en los siguientes pasos:

  1. Drupal establece la path.Por ejemplo si nuestra url es http://example.com/?q=node/6 o http://example.com/node/6 ,si trabajamos con urls amigables,la path que drupal establecería sería node/6.
  2. Se realiza un seguimiento del mapa de direcciones (paths map) con sus correspondientes callbacks consultando la tabla menu_router de la base de datos.Del mismo modo hace un seguimiento de los elementos de menu (menu items) consultando la tabla menu_links.
  3. Averigua qué entrada de la tabla menu_router corresponde con la path y se construye un elemento de enrutamiento (router item) describiendo la callback que va a ser llamada.
  4. Se cargan cualquier objeto necesario para la funcion callback.
  5. Se comprueban los permisos de usuario para acceder a la callback, si no se tienen permisos suficientes se retorna un mensaje de “Acces denied”.
  6. Se localizan el título y la descripción del menu item para el lenguaje actual.
  7. Se cargan los ficheros adicionales necesarios.
  8. Finalmente se llama a la función callback y devuelve un resultado, conforme a este resultado index.php lo pasa a través de la theme_page() mostrándose finalmente la pagina deseada.