Menu in blocchi/regioni diverse visualizzati a seconda della selezione di voci di un altro menu: come si fa?

20 contenuti / 0 new
Ultimo contenuto
Menu in blocchi/regioni diverse visualizzati a seconda della selezione di voci di un altro menu: come si fa?

Ciao a tutti,
ho bisogno di visualizzare un sito con 3 menu:uno sull’header, uno sotto l’header (che chiamo zona sottoheader) e uno nella barra di sinistra.

Il primo menu (header) pilota gli altri 2, ossia cliccando sulla prima voce del menu1 devo visualizzare:
a) sulla barra sinistra un determinato menu
b) sulla zona sottoheadeer un altro determinato menu
c) nella zona centrale la pagina di presentazione della prima voce del menu1.

Cliccando sulla voce 2 del menu header devo visualizzare:
d) sulla barra sinistra un altro menu
e) sulla zona sottoheadeer un altro menu
f) nella zona centrale la pagina di presentazione della seconda voce del menu1.

Esempio
menu1: sport:
calcio --> voce 1
atletic --> voce2

Cliccando su calcio del menu 1 devo visualizzare 2 menu relativi a calcio e una pagina centrale di presentazione della voce calcio
menu2 di calcio (barra sinistra)
goal --> voce 1.11
marcatori -->voce 1.12

menu3 di calcio (zona sotto header)
partita -->voce 1.21
campionato di calcio -->voce 1.22

Cliccando sulla voce atletica del menu1 devo visualizzare i 2 menu relaviti ad atletica e una pagina centrale di presentazione della voce calcio

menu2 di atletica (barra sinistra):
record del mondo-->voce 2.11
nome dei campioni--> voce 2.12

menu3 di atletica (zona sotto header)
eventi mondiali--> voce 2.21
eventi italiani-->voce 2-22

Aiuto, non so come fare, è un mese che sono ferma su questo problema.
Quali concetti devo applicare e quali strumenti utilizzare?
Non sono molto brava in Drupal ma sto investendo e investirò molto tempo su di lui.

sembra un lavoro per context.
Una delle possibili condizioni è proprio la voce di menu attiva.

Grazie mille bohz,
guardo subito la cosa e ti faccio sapere com'è andata.

Allora,
sono riuscita a visualizzare il menu, ossia quando scelgo la voce calcio del menu1 visualizzo il menu2 di calcio e il menu3 di calcio.
Il problema è che quando scelgo una qualsiasi voce dei menu2 e menu3 questi scompaiono, perchè la voce attivà non è più "calcio" del menu 1.
Spiego come ho costruito i blocchi: ho costruito separatamente 5 menu, tutti indipendenti l'uno dall'altro:
1)il menu che pilota (voci: calcio, atletica)
2) menu2 di calcio
3)menu3 di calcio
4) menu2 di atletica
5) menu3 di atletica

Non so forse ho sbagliato qualcosa, devo usare qualche modulo che considera i sotto menu figli del menu principale? Se sì, cosa devo usare? Non sono tanto brava con i nodi e le tassonomie, ma qualcosa mi dice che devo usare questi concetti, o forse i moduli cck, taxonomy.... sbaglio?

vedo qual'è il problema: il menu "controllore" determina il contesto, ma quando ti muovi all'interno di quel contesto con gli altri menu il contesto si perde.
Non mi sono mai trovato in questa situazione ma le soluzioni che proverei sarebbero:
1) unisci tutti i menu in uno solo con calcio e atletica come voci di primo livello e le voci relative come secondo/terzo livello; con il modulo menu_block puoi visualizzare in blocchi separati i vari sottomenu, lo installi e ti ricrei i blocchi (menu) di partenza, solo che funzionalmente ora fanno parte di un solo menu. adesso, se associ un contesto alla voce "calcio" (spero) tutto ciò che si trova in quella voce di menu (e quindi tutto il sottomenu "calcio" dovrebbe essere consistente con il contesto.
2) se così non va, significa che context tiene conto solo della voce ATTIVA e non di quella genitore (non lo so, non ho mai provato). mi pare una sciocchezza, però. in questo caso bisogna ripensare a tutto e valutare anche altri moduli da usare al posto di context come ad esempio panels, oppure fare tutto con le viste...
oppure sempre con context, giocare sui percorsi (path) dei vari contenuti...

[edit: altra alternativa al punto 1: aggiungi i menu calcio2 e calcio3 al contesto di calcio1. dovrebbe funzionare]

Bohz sei un tesoro provo subito e torno da te!

non sono un tesoro (hehe), context interessa molto anche a me! ;)
fammi sapere come va!

ho provato e confermo quanto scritto in #4, ultima riga: usando "menu" come condition, bisogna selezionare ogni singola voce per cui quel contesto deve essere valido (ctrl+click per selzione multipla)

Non riesco a provare completamente la funzionalità perchè nella condizione di context, usando "menu" come condition, non vengono visualizzate tutte le voci del mio menu, in modo da poter selezionare quelle che mi interessano,ossia mi vengono solo visualizzate:
1)calcio
2)atletica
3)eventi italiani
ossia
voce 1
voce 2
voce1.2.2

Perchè non mi vengono visualizzate tutte le voci, ossia:
-voce 1
--voce 1.1
--voce 1.2
---voce 1.2.1
---voce 1.2.2

-voce 2
--voce 2.1
--voce 2.2
--- voce 2.2.1
-- voce 2.2.2

??

grazie ancora tanto.

admin/build/menu/tuomenu: le voci con figli sono espanse (checkbox)?

si le voci sono espanse. Ho rifatto anche da capo i menu, sia come 1 emnu unico, e poi uso di block_menu per suddividere, sia lasciandoli come 3 menu separati.
Quando creo un nuovo context viene visualizzata SOLO l'ultima voce creata di ogni menu!

mmm
faccio un test e ti dico.
le voci di menu (le ultime) puntano a:
nodi
viste
altro
?

Non ho messo i path reali, ho messo come path di ogni voce, ora provo a mettere i path reali (sono pagine, quindi nodi)....

Adessso vengono fuori!!!!!!!!!!!!!!!!!!!! vado avanti e ritorno da te.

bene.
devi sempre assegnare path validi alle voci di menu (salvo eccezioni).
ho replicato la situazione in una installazione pulita:
2 menu custom: atletica e calcio
ciascun menu ha tre livelli (ciascuna voce punta ad un nodo); tipo:
[atletica]
- atletica 1
- - atletica 1.1
- - - atletica 1.1.1

nella UI di context visualizzo l'intero albero: http://imgur.com/3Q5ca

ho creato 2 voci di menu in primary links (ma potrebbe essere anche un menu custom): calcio e atletica
ho creato 2 contesti: calcio (conditions, menu trail: tutte le voci del menu calcio + la voce "calcio" nei primary links; reactions: mostra blocco menu calcio) e atletica (stessa cosa)

ora:
homepage: ci sono solo i 2link nei primary
click su calcio: si visualizza il menu calcio
click su atletica: si visualizza il menu atletica

...mi pare che funzioni! ;)

Benissimo funziona anche a me!!!!!
Io ho fatto un menu unico con tutte le sottovoci come mi hai consigliato di fare in #4 punto 1.

Però il problema mi rimane quando clicco su un altro link, spiego meglio:
ho un footer con un menu: cliccando su qualsiasi voce del menu footer devono rimanere visibili i menu di calcio (se provenivo da calcio) e i menu di atletica (se provenivo da atletica).

Questo discorso si può estendere per qualsiasi altro link, ad esempio nel contenuto della pagina centrale. Cioè devo rimanere in calcio se la prima volta ho scelto calcio, qualsiasi altro link io scelga nella pagina, nella regione sinistra o destra.

Questo mi spaventa parecchio perchè non ho proprio idea di come risolverlo!

beh, così le cose si complicano anzicheno'.
finchè si tratta di mantenere coerente un sistema gerarchico va bene context, ma quello che vuoi fare tu richiede, se non sbaglio, di usare variabili di sessione (o eventualmente PURL) per gestire i contesti in funzione del percorso che fa l'utente. Va un po' oltre le mie capacità attuali...
In ogni caso si tratta di scrivere almeno un modulo ad hoc. credo.
Forse anche spaces potrebbe essere d'aiuto in situazioni simili ma, onestamente, proprio non saprei da dove cominciare!

[EDIT]: si, sembra che il modulo PURL potrebbe essere la soluzione; nel tuo caso dovresti costruire tramite modulo ad hoc 2 prefissi del tipo
tuosito/calcio che si attiva quando clicchi la voce "calcio" nel menu di controllo. questo path dovrebbe rimanere persistente nel corso della navigazione (ad es: tuosito/calcio/node/56, anche se il nodo 56 non è associato al menu "calcio"), finchè non si clicca un link che attiva un altro prefisso (ad es: tuosito/atletica) o che lo disattiva.
In una situazione del genere il contesto per "calcio" o "atletica" non sarà più basato sul menu attivo ma sul path.
RIpeto però, PURL è una API e quindi va implementata via codice.

grazie bohl che brutta notizia. pensavo ad utilizzare una variabile di sessione, ma non ho mai programmato in drupal, chissà se c'è qualche modulo che permette di usarle senza scrivere codice?

è un po' difficile gestire drupal senza mettere mai mano al codice... ti consiglio di darci almeno un'occhiata.
Quello a cui dovresti puntare piuttosto, è toccare meno codice possibile.
La soluzione che ti propongo va in questa direzione. Tieni presente però che se sviluppi un sito basato su moduli in dev, serve molto coraggio e buona volontà (anche a smanettare nel codice).
Finita la predica.
E' stato da poco rilasciato sites che permette di usare context+PURL senza bisogno di features e spaces. La brutta notizia è che non è nemmeno pubblicato tra i moduli (lo puoi trovare qui) e che la UI lascia un po' a desiderare. Ma funziona (o almeno sembra!).
Assieme a context, installa PURL e Sites.
Abilita il modulo path (core)
Crea due "sites": calcio e atletica.
crea due menu items per calcio (path=calcio) e atletica (path=atletica). per ciascuno di essi assicurati di settare "Persistant URL behavior" su "disabled"
Aggiorna i due contesti per usare il "sites" corrispettivo.
A questo punto quello che succede è che quando vai su tuosito/atletica, i path di TUTTI i link saranno modificati in tuosito/atletica/path. ovvero sei nella sezione "atletica"; come fai ad uscire? cliccando qualunque link di menu che abbia le impostazioni di PURL settate su "disabled".
E quindi se vai su tuosito/calcio, Tutti I path saranno tuosito/calcio/path. (e il contesto rimane "calcio")

Problema: e i link che non hanno un menu item? se li lasci così come sono rimarranno nel path da cui sono stati cliccati; se invece vuoi che siano indipendenti (ad es tuosito/about e non tuosito/atletica/about) devi disabilitare PURL per quel link.
come si fa?
si usa una di queste 3 funzioni in template.php o nei tpl.php:

<?php
l
('TESTO-LINK', 'path/to/link',  array('purl' => array('disabled' => TRUE))); //restituisce un link formattato
url('path/to/link',  array('purl' => array('disabled' => TRUE))); //restituisce una URL
purl_goto('path/to/link',  array('purl' => array('disabled' => TRUE))); //restituisce una URL
?>

un link che dovrai senz'altro modificare è quello della home.

spero ti sia d'aiuto.

bohz ti ringrazio di cuore.
Proverò a realizzare quanto mi hai suggerito, ritornerò per far sapere com'è andata.
Ancora grazie.