Una de las opciones básicas en una web, son los menús. Pueden ser horizontales, verticales o de mil formas, pero su existencia es imprescindible en una web.
En drupal es muy sencillo crear un menú, pero nosotros lo haremos por código.

Empezamos a ver como lo hacemos.

Para realizar nuestro menú, aremos uso del hook_menu. (http://api.drupal.org/api/function/hook_menu/6)

Este hook nos ayuda a crear nuestro propio menú, con los ítems que creamos.
Parámetros de cada ítem:

-title: El titulo que mostrara el ítem del menú.
-description: Una pequeña descripción del ítem (no obligatoria, pero si que la uso para aveiguar rapidamente que hace el ítem)
-page callback: La pagina, formulario, etc que se nos mostrara al hacer clic.
-page arguments: Array de argumentos que se pasan a la pagina de callback.
-access arguments: Array con los permisos que podrán visualizar la pagina.
-file: Si tenemos el fichero que contiene el callback en un lugar distinto del menú, aquí especificamos donde se encuentra.(La ruta no será siempre a partir del directorio actual).
-weight: El peso que tiene el ítem. Drupal muestra de mas pequeño a mas grande.
-type: El tipo de menú. Por defecto estará en MENU_NORMAL_ITEM, pero podemos tener mas casos. Ejemplo:
-MENU_CALLBACK: No se mostrara el ítem del menú ya que solo se usara como llamada para recoger su contenido.

Como creo un menú.
Primero de todo, debemos crear nuestra función usando el hook_menu.

PHP:
  1. ejemplo_menu() {
  2. // productos es la ruta que tiene el ítem, osea www.sitio.com/productos
  3. $item[‘productos’] = array(
  4. 'title' = 'Listado de productos',
  5. 'description' = 'Listado de todos los productos de la empresa',
  6. // ejemplo_listado_productos es la función que nos mostrara el contenido.
  7. '‘page callback' = 'ejemplo_listado_productos',
  8. // Id de la empresa que necesita la funcion ejemplo_listado_productos para mostrar el      resultado
  9. 'page arguments' = array('id_empresa'),
  10. // Trabajadores es el único rol que podrá ver este ítem de menú.
  11. 'access arguments' = array('trabajadores'),
  12. // Ruta donde esta la función ejemplo_listado_productos.
  13. 'file' = '/includes/ ejemplo_listado.inc',
  14. );
  15. // Si quisiéramos mas menús:
  16. $item['empresas'] = array(
  17. // Insertar los campos.
  18. );
  19. // Retornamos los ítems de menú creados.
  20. Return $items.
  21. }

Y si queremos hacer un menú con submenús?
Es muy sencillo. Tendremos que hacer uso de el tipo MENU_LOCAL_TASK de los menú.
Ejemplo:

PHP:
  1. $item['admin/productos'] = array(
  2. 'title' = 'Listado de productos',
  3. 'description' = 'Listado de todos los productos de la empresa',
  4. 'page callback' = 'ejemplo_listado_productos',
  5. 'page arguments' = array('id_empresa'),
  6. 'access arguments' = array('trabajadores'),
  7. 'type' =   MENU_LOCAL_TASK,
  8. 'file' = '/includes/ ejemplo_listado.inc',
  9. );
  10. $item['admin/productos/productos artesanales'] = array(
  11. 'title' = 'Listado de productos artesanales',
  12. 'description' = 'Listado de todos los productos de la empresa',
  13. 'page callback' = 'ejemplo_listado_productos',
  14. 'page arguments' = array('id_empresa'),
  15. 'access arguments' = array('trabajadores'),
  16. 'type' =   MENU_LOCAL_TASK,
  17. 'file' = '/includes/ ejemplo_listado.inc',
  18. );
  19. $item['admin/productos/productos_manufacturados'] = array(
  20. 'title' = 'Listado de productos manufacturados',
  21. 'description' = 'Listado de todos los productos de la empresa',
  22. 'page callback' = 'ejemplo_listado_productos',
  23. 'page arguments' = array('id_empresa'),
  24. 'access arguments' = array('trabajadores'),
  25. 'type' =   MENU_LOCAL_TASK,
  26. 'file' = '/includes/ ejemplo_listado.inc',
  27. );
  28. $item['admin/productos/productos_en_stock'] = array(
  29. 'title' = 'Listado de productos en stock',
  30. 'description' = 'Listado de todos los productos de la empresa',
  31. 'page callback' = 'ejemplo_listado_productos',
  32. 'page arguments' = array('id_empresa'),
  33. 'access arguments' = array('trabajadores'),
  34. 'type' =   MENU_LOCAL_TASK,
  35. 'file' = '/includes/ ejemplo_listado.inc',
  36. );

Nos quedaría una cosa similar a esto:

menu

Puedes probar de crear tu menú y hacer pruebas con los callback, los tipos, los permisos, etc.
Para mas dudas, en los comentarios :)