it-swarm-es.com

enrutamiento predeterminado del módulo personalizado

Estoy tratando de escribir mi primer módulo y estoy usando hook_menu para enrutar las páginas. El módulo consta de un formulario de varios pasos y dos páginas de contenido estático.

/**
 * Implements hook_menu().
 */
function order_menu() {
  $items = array();

  $items['order/form'] = array(
    'title' => 'Order Form',
    'description' => 'Order multistep form.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('order_form'),
    'access callback' => TRUE,
    'file' => 'order_form.inc',
    'tpe' => MENU_CALLBACK,
  );

  $items['order/cancel'] = array(
    'title' => 'Order Cancelled',
    'description' => 'Order cancelled.',
    'page callback' => 'order_cancel',
    'access callback' => TRUE,
    'file' => 'order_form.inc',
    'type' => MENU_CALLBACK,
  );

  $items['order/success'] = array(
    'title' => 'Order Success',
    'description' => 'Order Successful.',
    'page callback' => 'order_success',
    'access callback' => TRUE,
    'file' => 'order_form.inc',
    'type' => MENU_CALLBACK,
  );

  return $items;
}

Lo que quiero hacer es poder acceder a 'example.com/order/form' desde 'example.com/order' pero cuando cambio el enlace del menú de $ items ['order/form'] a $ items ['order '] se muestra como página no encontrada.

¿Alguna sugerencia sobre cómo hacer que el módulo muestre el contenido que quiero de example.com/order?

2
cbaigorri

¿Obligó a Drupal a reconstruir el menú, después de cambiar el código? Si no lo hace, Drupal usará los menús previamente definidos.

Para forzar a Drupal a reconstruir los menús, solo necesita visitar la página de módulos (la página de administración que muestra la lista de todos los módulos instalados), deshabilitar un módulo y volver a habilitarlo. dos operaciones no son estrictamente necesarias, probablemente obtendría el mismo efecto si hace clic en el botón "Guardar" presente en esa página sin habilitar o deshabilitar ningún módulo.
Drupal llamará a cualquier implementación de hook_menu() y hook_menu_alter(), y tomará las últimas devoluciones de llamada de menú definidas desde su módulo.

Alternativamente, puede llamar a menu_rebuild () desde el código, o instalar Devel , que tiene un bloque que contiene un enlace que permite forzar Drupal para reconstruir la lista del menú que almacena en caché.

2
kiamlaluno

El problema es que order no está definido como un elemento de menú. Una forma fácil de solucionar este problema sería incluirlo en la definición del menú de gancho:

/**
 * Implements hook_menu().
 */
function order_menu() {
  $items = array();

  $items['order'] = $items['order/form'] = array(
    'title' => 'Order Form',
    'description' => 'Order multistep form.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('order_form'),
    'access callback' => TRUE,
    'file' => 'order_form.inc',
    'type' => MENU_CALLBACK,
  );

  ...

}

Podría utilizar el MENU_DEFAULT_LOCAL_TASK Para el order/form elemento del menú, pero creo que generará una pestaña de forma predeterminada, que puede que no sea lo que desea.

Recuerde borrar la caché después de realizar estos cambios.

2
googletorp