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?
¿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é.
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.