it-swarm.it

Come impostare una voce di menu attiva?

Ho un sito che ha molti menu. Uno di questi è il menu principale con poche voci. Questi elementi si collegano alle aree principali del sito e ognuna di queste aree principali ha un menu specifico. Quando sono su una pagina di destinazione di una di queste aree principali, l'elemento di essa nel menu principale è attivo, ma quando sono su una pagina interna di una di queste aree, l'elemento nel menu principale non è attivo .

C'è un modo per renderlo attivo automaticamente?

Ho provato a usare menu_position ma sembra non funzionare.

5
Luiz Guilherme

Contesto fornisce questa funzionalità pronta all'uso.

10
Capi Etheriel

Loro sono molti modi. Elenco qui solo le cose compatibili con D7 e infine su D6.

Usa un modulo

Codifica le tue cose

La loro ora è un'API nativa menu_tree_set_path per impostare il percorso che si desidera utilizzare per calcolare la traccia attiva del menu.

Puoi anche lavorare in theme_links ma ti consiglio di usare menu_tree_set_path in modo che altri moduli sappiano qual è il tuo link attivo. Il vantaggio è che puoi usare questa funzione nel tuo tema senza creare un modulo.

Tieni presente che menu_position ha un'API per creare le tue regole personalizzate.

Quindi cosa dovrei usare ???

Dipende dalle tue necessità. se hai regole semplici come: per questo tipo di nodo/viste/tassonomia voglio questo menu attivo, il contesto è buono.

Se hai una buona struttura di URL (autopath) che segui la struttura del tuo menu, menu_trail_by_path funzionerà senza alcuno sforzo.

Non ho mai usato menu_position ... quindi posso dirlo molto.

Se hai bisogno di una logica speciale, codificare le tue cose è sicuramente più veloce della creazione di 40 contesti o regole ...

13
gagarine

Il modo più semplice è solo quello di rendere quelle voci di menu delle tue pagine "interne" (sottopagine appartenenti alle tue aree/pagine di destinazione) figli delle voci di menu delle pagine di destinazione.

Qualcosa di simile a:

 menu dei collegamenti primari 
 | 
 + - voce di menu pagina di destinazione 1 
 | | 
 | + - voce di menu della pagina 1 interna 
 | + - voce di menu pagina 2 interna 
 | 
 + - voce di menu pagina 2 di destinazione 
 | 
 + - voce di menu pagina 3 interna 
 + - voce di menu pagina 4 interna 

Se devi tenerli in menu separati, probabilmente dovrai giocare con theme_links () per mantenere le classi "active-trail" e/o "active" appropriate.

3
Maciej Zgadzaj

Forse Modulo Blocco men ti sarebbe d'aiuto.

(Insieme all'approccio che Maciej delinea sopra).

Dalla pagina del progetto Blocco menu:

Fornisce blocchi configurabili di alberi di menu a partire da qualsiasi livello di qualsiasi menu. E altro!

Pertanto, se stai utilizzando solo la funzione dei collegamenti del menu principale del tuo tema, puoi aggiungere e configurare un blocco "Menu principale (livelli 2+)". Quel blocco apparirà una volta che eri su una delle pagine del menu principale e mostrerebbe l'albero del menu per il 2 ° livello (e più profondo) del tuo menu principale e si espanderebbe mentre attraversi l'albero. Puoi anche limitare la profondità dell'albero del menu (ad es. "Menu principale (livelli 2-3)") e/o espandere tutti i sottomenu secondari (ad es. "Menu principale (livelli 2+ espansi)").

1
iainp999

Puoi anche usare hook_translated_menu_link_alter(). Questo sarebbe un po 'complicato.

/**
 * Implements hook_translated_menu_link_alter()
 */
function Module_translated_menu_link_alter(&$item, $map) {

    if ($item['menu_name'] == 'menu-name') {

        //check first two arg from url
        $path = arg(0)."/".arg(1);

        //add class active-trail if path match
        if (strpos($item['link_path'], $path) !== false) {
            $item['in_active_trail'] = true;

        }

    }
}
0
batMask