URL multipli che puntano ad stessa scheda in hook_menu
Domanda
Ecco una struttura di menu di base con cui sto lavorando:
function events_menu()
{
$items = array();
$items['events'] = array(
'title' => 'Current Events',
'access callback' => true,
'page callback' => 'page_event',
'type' => MENU_CALLBACK,
);
$items['events/current'] = array(
'access callback' => true,
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => 1,
);
$items['events/regions'] = array(
'title' => 'Event By Region',
'access callback' => true,
'type' => MENU_LOCAL_TASK,
'weight' => 2,
);
$items['events/range/%/to/%'] = array(
'title' => 'Current Events by Range',
'access callback' => true,
'page callback' => 'page_event_range',
'page arguments' => array(2, 4),
'type' => MENU_LOCAL_TASK,
/* Don't want this to be a tab.
I want it to activate the default tab */
);
return $items;
}
L'URL (e scheda predefinita) events
mostra alcuni dati. Mi piacerebbe il events/range/%/to/%
URL per filtrare i dati in base ai parametri URL passati.
Il hook_menu sopra funziona, ma io non voglio events/range/%/to/%
sia il proprio scheda. Quando si utilizza l'URL filtrato, voglio la scheda predefinita, Attualità, di rimanere attivi - per dare l'illusione che si sta guardando la stessa pagina come events
, solo filtrato. Can punto di URL multipli per la stessa scheda?
Credo che avrei potuto gestire i parametri URL manualmente con arg()
nella pagina events
richiamata, ma questo sembra hacky. Non c'è un modo per farlo utilizzando hook_menu?
Modifica (detto più chiaramente):
Normalmente ci sono due schede Eventi in corso e eventi per regione per quanto URL events
e events/regions
. Voglio un (solo callback) URL nascosta events/range/%/to/%
. Ma quando si visita, voglio le due linguette di rimanere eventi visibili e corrente attiva -. Come se avessimo mai lasciato la pagina
Soluzione
Non credo che sia possibile realizzare ciò che si vuole soltanto con menù gancio. Che cosa si potrebbe fare uso menu_set_active_trail
per rendere Drupal far sembrare che gli utenti sta guardando la pagina /events
.
Il metodo di cui sopra potrebbe funzionare solo per Drupal 7
Per Drupal 6 si potrebbe alterare $_GET['q']
. Questo può, tuttavia contrapposti alcuni moduli come rovescio o globalredirect. Questa non è una bella soluzione, ma funziona. Il posto migliore per fare questo sarebbe in un modulo personalizzato utilizzando hook_init
.
Altri suggerimenti
Usa MENU_CALLBACK invece di MENU_LOCAL_TASK, e la scheda spariranno. Quindi impostare la voce di menu corrente 'eventi' in questo modo (potrebbe funzionare soltanto nel hook_init, ma si può provare nella pagina richiamata troppo:
$item = menu_get_item();
$item['href'] = 'events';
menu_set_item(NULL, $item);
Hai provato 'contesto' Module. È possibile impostare modello percorso che si desidera per il menu attivo. Dai un'occhiata a questo rapido video demo.