Salve a tutti,
Ho un problema che credevo semplice, ma temo che mi stia perdendo in un bicchiere d'acqua!!
Ho creato un nuovo menu del tipo:
Miomenu
voce1
voce2
voce3
visualizzato sul footer.
Ho generato un nuovo tipo di contenuto:miotipo.
Ora la voce1 di Miomenu deve essere visibile solo se il contenuto del nodo visualizzato è di tipo miotipo.
Come posso fare, senza disattivare tutto il menu?
Grazie
forse ti conviene usare views, ed aggiungere più filtri...
Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.
WeBrain Solution | Pillsofbits Of Bits
Ciao kiuz, forse, però ho provato ad usare la classica funzione phptemplate_menu_item_link($link) in template.php
Ad esempio, senza considerare il tipo nodo, volendo disabilitare una voce , ho provato con
ma "hidden" non funziona. La cosa strana è che se metto :
$link['title']="nuovo titolo" , il titolo viene modificato, quindi la chiamata alla funzione è corretta e ci si passa.
________________________________________________________________________________________
Quando risolverai il problema, scrivi come hai fatto, e se puoi scrivi [RISOLTO]
Sarà utile ad altri. Grazie
enzoazzolini.it
Anch'io credo che la soluzione proposta da kiuz sia la strada meno doloroso.
Anche se non hai ancora affrontato la parte difficile (prendere il nid per interrogare il db sul tipo di contenuto), possiamo remediare un pò di codice qui. Ma questo
Il codice di default in includes/menu.inc dice:
function theme_menu_item_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
return l($link['title'], $link['href'], $link['localized_options']);
}
La funziona l() scrive il link. Quindi se esistono quelli altri proprietà in
$link
(non lo so, potresti provare a vedere condsm($link)
- e Devel abilitato), allora non devi chiamarel()
, altrimenti si.Però tutti i menù che ho visto io in Drupal sono avolti in
<ul><li>
. Penso che stai guardando troppo a vale. Veditheme_menu_tree
sempre in includes/menu.inc. E no, non so neanch'io cosa c'è dentro$tree
- managgia a questi strutture di dati non documentati...Più imparo, più dubito.
Ciao jhk,
si è roba mia e sta in template.php, usa sia la funzione di default che hai detto sia la mia.
La scrivo meglio e completa ...
ma non funziona , anche se non capisco perchè.
Probabilmente l'array $link non essendo passata per riferimento non posso modificarla.
________________________________________________________________________________________
Quando risolverai il problema, scrivi come hai fatto, e se puoi scrivi [RISOLTO]
Sarà utile ad altri. Grazie
enzoazzolini.it
Allora si, non essendo di riferimento non puoi modifiare
$link
, ma anche se forse possibile?Se 'inventi' una proprietà (per quello chiedevo se era roba tua) di
$link
nuovo, perchè il vecchio codice di Drupal dovrebbe riconoscerlo? O 'sapere' cosa farne?Ho già postato il codice di quel funzione - vedi dove fa il test per
$link['hidden']
? Neanch'io...Sequi il consiglio di kiuz, views sono molto potenti per questo tipo di operato. Vedi anche http://drupal.org/project/menu_node_views o http://drupal.org/project/taxonomy_menu
Più imparo, più dubito.
Aspetta mi sono espresso male , è mia la funzione phptemplate_menu_item_link() non il parametro $link['hidden'], quello è di Drupal.
Comunque grazie per il consiglio, se non trovo la soluzione mi orienterò come dite voi sulle views.
________________________________________________________________________________________
Quando risolverai il problema, scrivi come hai fatto, e se puoi scrivi [RISOLTO]
Sarà utile ad altri. Grazie
enzoazzolini.it
probabilmente è una soluzione che funziona, ma personalmente ho dovuto affrontare un problema simile, con l'aggiunta di un testo aggiuntivo per ogni voce del menu che doveva essere indipendente dal testo del reale contenuto a cui puntava il link...
la soluzione meno dolorosa (cit. Jhon) è senza dubbio views, poi dipende sempre da cosa ci devi fare :)
appena il sito in cui ho affrontato il problema poche righe sopra entra in fase di produzione ti mostro come views probabilmente è la soluzione migliore
Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.
WeBrain Solution | Pillsofbits Of Bits
Salve, alla fine ho risolto in questo modo:
1) Ho fatto un piccolo modulo miomodulo.module con dentro la funzione miomodulo_nodeapi che viene invocata quando si visualizza un nodo
2) Ho modificato la funzione phptemplate_menu_item_link($link) in template.php
in modo tale che se si sta elaborando l'item 'voce1' e la variabile di sessione mi dice che il tipo non è miotipo
il link al menu torna vuoto, cioè eliminato, altrimenti torna il valore normale.
Funziona!!
Sarei comunque interessato a capire come risolvere il problema con le View.
P.S.
Ho dovuto mettere una variabile di sessione perchè quando si entra in phptemplate_menu_item_link($link) le informazioni
sul nodo (oggetto $node) non sono disponibili e quindi non conosco $node->type.
Qualcuno sa se c'è modo per conoscerle?
________________________________________________________________________________________
Quando risolverai il problema, scrivi come hai fatto, e se puoi scrivi [RISOLTO]
Sarà utile ad altri. Grazie
enzoazzolini.it
Avendo usato grep un pò meglio, trovo che hai ragione - 'hidden' viene usato nel core. Sorry. Ottimo sapere del uso di $_SESSION[]. Per chi c'è l'ha: Pro Drupal Development, Capitolo 16, pp 365. E credevo di aver letto quel libro, sigh. Bravo Enzo
Più imparo, più dubito.
enzodrup: ti sconsiglio VIVAMENTE di usare $_SESSION, gli effetti collaterali che ne conseguiranno saranno catastrofici :D
a parte gli scherzi, fai attenzione che la session se non viene rimossa viene serializzata nel DB portando a una crescita dei dati in tabella che (se in questo caso) è minima, in altre situazioni puà essere disastrosa (io proprio in questi giorni sto litigando con il modulo spam che fa una cosa del genere con effetti devastanti per il DB).
Ciao
Marco
--
My blog
Working at @agavee