Definir rutas o URL para nuestros módulos es algo muy habitual, para esto usamos el hook_menu, aquí podemos definir rutas a nuestro gusto, pase de parámetros, permisos de seguridad, función que procesa la solicitud, callback para el uso de AJAX, y otras cosas. Hoy explicamos 4 ejemplos muy comunes para poder sobrevivir, dejando a un lado las opciones que no nos interesan.

Ruta simple:

function rutas_menu() {
  $items['path'] = array( 'title'           => 'Ejemplo de ruta #1',
                          'page callback'   => 'rutas_example_one_form',
                          'access callback' => TRUE);
}

function rutas_example_one_form() {
  $markup = t('Lorem ipsum dolor sit amet, consectetur adipisicing...');
  return array('#markup' => $markup);
}

Esto sería un ejemplo de como accedemos por la URL y los que nos devuelve:

Ruta con pase de un parámetro:

function rutas_menu() {
  $items['path/%'] = array(
    'title'           => 'Ejemplo de ruta #2',
    'page callback'   => 'rutas_example_two_form',
    'page arguments'  => array(1),
    'access callback' => TRUE,
  );
}

function rutas_example_two_form($arg){
  $markup = t('Parámetro del url: ') . $arg;
  return array('#markup' => $markup);
}

Las posiciones inician por el valor 0, podemos ver el siguiente ejemplo de su resultado:

Ruta con pase de parámetros y control de acceso basico:

function rutas_menu() {
  $items['path/id/%'] = array(
    'title'           => 'Ejemplo de ruta #3',
    'page callback'   => 'rutas_example_three_form',
    'page arguments'  => array(2),
    'access callback' => TRUE,
    'access callback' => 'user_is_logged_in',
  );
}

function rutas_example_three_form($arg){
  $markup = t('Parámetro ID del url: ') . $arg;
  return array('#markup' => $markup);
}

En el siguiente ejemplo podemos observar dos resultados; el primero es un acceso negado, el segundo es el resultado cuando el acceso es correcto. Cualquiera de los ejemplos anteriores son ideales para hacer un callback de AJAX, solo debemos cambiar el header de retorno.

Ruta con pase de dos parámetros y callback del formulario:

function rutas_menu() {
  $items['path/four/id/%/%'] = array(
    'title'           => 'Ejemplo de ruta #4',
    'page callback'   => 'drupal_get_form',
    'page arguments'  => array('rutas_example_four_form', 3, 4),
    'access callback' => TRUE,
  );
}

function rutas_example_four_form($form, &$form_state, $arg1, $arg2) {
  $markup = t('Parámetros del url: ') . $arg1 . ', ' . $arg2;
  $form['body'] = array('#markup' => $markup);
  return $form;
}

Este ejemplo es ideal cuando trabajamos con formularios propios.

Es muy importante limpiar el cache luego de modificar la función del menu y sus respectivas funciones de tipo callback.