Come posso inserire un menu di tassonomia come sottomenu di una voce di menu standard?


12

Ho un menu principale, con una struttura di livello superiore simile al seguente:

Home - Categories - Something Else - ... - Contact

Ciascuno di quei collegamenti di livello superiore va a una pagina nodo appropriata.

Ho un vocabolario per Categorie (multi-livello) e ho bisogno di ottenere quei termini di tassonomia in un sottomenu sotto la voce "Categorie". Vorrei evitare di codificare le voci nel menu principale, poiché il sottomenu dovrebbe crescere / restringersi come fa il vocabolario.

In passato ho scritto un codice troppo elaborato per raggiungere questo obiettivo, che si aggancia alle operazioni di tassonomia e gestisce le voci secondarie di un determinato menu in base a quello (molto simile a quello che fa il menu di tassonomia , ma senza dover avere un menu diverso per ogni vocabolario).

Mentre quel metodo funziona, non è l'ideale e certamente non generico. Non posso semplicemente sollevare quel codice dal vecchio progetto a quello nuovo, richiederebbe una ragionevole quantità di personalizzazione.

Non posso fare a meno di pensare che ci debba essere una soluzione "standard", basata su moduli.

Ho visto alcuni suggerimenti là fuori per usare un sacco di moduli diversi in combinazione (anche alcuni che suggeriscono di usare moduli basati su Views, abbastanza stranamente). Sono aperto a qualsiasi suggerimento, ma se si tratta di installare più di 1 o 2 moduli e un carico di configurazione hardcoded specifica per il contesto, probabilmente non sarà di grande aiuto in questo caso.


1
Penso di averlo visto ... Argomento simile contiene un'idea sull'uso delle regole per creare voci di menu basate sulla tassonomia, ma anche questo sembra tutt'altro che ideale.
Mołot,

Se ho capito bene, sei simile a questo modulo drupal.org/project/taxonomy_treemenu , può integrarsi con un bel menu ma per D6
Bala

Devi avere voci di menu effettive o è possibile aggiungere l'albero dei termini della tassonomia nel menu quando viene visualizzato?
Rooby,

Grazie @Bala, ho bisogno di una soluzione D7 però
Clive

1
Clive Ho un suggerimento. Come so, puoi generare il menu taxonomu con il nome del vocabolario incluso e quindi aggiungere altri collegamenti al menu direttamente nel menu generato. Gli articoli di tassonomia potrebbero essere aggiornati automaticamente ... Non so se funzionerà, provalo.
milkovsky,

Risposte:


13

Opzione a) A meno che non mi sbagli, non puoi semplicemente scegliere il punto in cui il tuo menu Tassonomia sarà associato (Posizione menu) quando lo crei? L'unico problema che penso che potresti avere con questo è che penso che ti richieda di ricostruire il menu ogni volta che la tassonomia viene aggiornata

Opzione b) Ho fatto qualcosa di ragionevolmente simile a questo sul mio sito, ho usato il modulo Visualizzazioni menu , per permettermi di mettere una vista nel mio menu principale.

Se si crea una nuova vista che elenca tutti i termini della tassonomia, come visualizzazione a blocchi, applicare eventuali filtri / modifiche aggiuntivi nella vista, se necessario (è possibile che non sia possibile, ma nel mio esempio lo volevo). Quindi, quando aggiungi un nuovo collegamento al menu principale, puoi selezionare di utilizzare una vista anziché un collegamento. Da lì scegli quale vista vuoi usare, seleziona la voce di menu 'Categoria' come suo genitore e salva (dopo averlo salvato devi abilitarlo nel menu, che sembra essere un bug con il modulo stesso)

Non posso garantire che questa sia la soluzione migliore per te, ma ha funzionato quando l'ho appena testata


1
Sì, ho scoperto che sono stato piuttosto stupido: il menu Tassonomia ha questa funzionalità integrata (l'opzione a). Il menu particolare con cui ho a che fare è piuttosto piccolo e le categorie non cambieranno spesso, quindi la ricostruzione non è un problema. Mille grazie per il controllo della sanità mentale
Clive

3

Menupoly ha un'API per "origini dell'albero dei menu" personalizzate. Non ne ho mai fatto uso per qualcosa di diverso dai collegamenti ai menu, quindi potrebbero esserci problemi che dobbiamo risolvere sulla strada. Ma l'architettura di base è lì.

Se segui questa strada, lo faresti

  • Usa il tuo menu principale esistente, senza alcun collegamento termini tassonomia oltre la pagina "Categorie".
  • Crea il tuo albero della tassonomia indipendente da quello.
  • Scrivi una "sorgente dell'albero dei menu" personalizzata che recupera dai menu_link come di consueto, ma quando trova un termine di tassonomia, recupera invece dalla tassonomia.
    Quindi, in qualche modo devi essere in grado di rilevare che il link "Categorie" è legato alla tassonomia.
  • Se un collegamento a menu è relativo alla tassonomia e allo stesso tempo ha un sottomenu regolare, è necessario in qualche modo mescolare i due tipi di bambini insieme.

Questo percorso sarebbe un po 'di lavoro, ma potrebbe essere utile per altri, ed è probabilmente più elegante e riutilizzabile della logica specifica del tuo sito.

Attualmente non esiste nemmeno una "sorgente dell'albero dei menu" solo per la tassonomia, quindi forse sarebbe un ragionevole primo passo prima di iniziare con un plugin misto.


detto questo, la risposta accettata da Andrew Morris potrebbe essere perfettamente abbastanza buona. E significa meno lavoro per me :) Volevo ancora pubblicare questo post per chiunque potesse trovarlo utile.
donquixote,

V. interessante, grazie. La risposta accettata sta facendo bene il lavoro, ma sono anche molto interessato a ottenere soluzioni di codice. Posso supporre che se uno dei tuoi moduli è tutto basato sulla bontà della PSR-0? :)
Clive

Questo utilizza la modalità di compatibilità PHP 5.2 di xautoload, che è in qualche modo simile a PEAR ma con directory poco profonde. Quindi, non approvato PSR. Potrei andare PSR-0 un giorno ..
donquixote,

anche se sono molto interessato a PSR-X (che potrebbe non entrare mai in D8, purtroppo)
donquixote

2

I menu Metro soddisferanno le tue esigenze e anche se hanno le skin integrate e possono crearne di tue che si comportano come dei bei menu. Con questo modulo è possibile selezionare tutti gli elementi secondari con qualsiasi profondità dal menu o dalla tassonomia e non lo sto usando prima.

Compatibilità con touchscreen (iPad, iPhone e ecc.).

inserisci qui la descrizione dell'immagine


2

È possibile utilizzare il modulo menu Om Maxi per lo stesso. Permetterà all'amministratore di creare menu con blocchi desiderati come allegati, moduli come visualizzazioni, presentazione, menu, utente, bei menu, schede rapide e blocchi personalizzati con tabelle, elenchi, immagini, video, ecc.

È possibile creare un menu separato utilizzando il menu Tassonomia e allegare questo menu come collegamenti secondari al menu generato dal menu om maxi.

Grazie


2

Di recente ho fatto qualcosa di simile per un menu di categoria di prodotto. Questo era solo per 1 livello di profondità, ma poteva essere facilmente modificato per mostrare ulteriori livelli.

/**
 * Implements theme_menu_link().
 */
function THEME_menu_link__main_menu($variables) {

  $sub_menu = '';
  $element = $variables['element'];
  $menu_string = $element['#title'];

  if (module_load_include('inc','pathauto','pathauto') !== FALSE) {
    $menu_string =  pathauto_cleanstring($menu_string);
  }

  if ($menu_string == 'categories') {
    $sub_menu = get_categories_menu();
  }

  if ($sub_menu) {
    $element['#attributes']['class'][] = 'haschildren';
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

function get_categories_menu() {

  $current_category = arg(2); // Get current category from path
  $volcab = taxonomy_vocabulary_machine_name_load('product-categories');
  $tree = taxonomy_get_tree($volcab->vid,0,1);

  $output = '<ul class="menu product-category">';
  foreach ($tree as $term) {
    $safe_term = pathauto_cleanstring($term->name);
    $class = ($current_category==$safe_term) ? ' class="active"' : '';
    $output .= '<li><a' . $class . ' href="/drupal//path/to/' . $safe_term . '">' . $term->name . '</a></li>';
  }
  $output .= '</ul>';

  return $output;
}

La funzione get_category_menu è meglio come blocco, ma mostrata qui come un'altra funzione nel template.php per comodità.

Spero che aiuti o sia almeno un passo verso una soluzione.

Paolo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.