Modo pulito di costruire un semplice browser di tassonomia di profondità arbitraria


23

Ho trascorso giorni cercando di determinare un modo pulito per fare quanto segue:

  1. Visualizza un elenco di tutti i termini di livello superiore in un vocabolario con collegamenti ai termini relativi ai figli
  2. Facendo clic su un collegamento, portati a un elenco dei figli di tali termini.
  3. Ad infinito fino al termine di livello più basso, per il quale verrà visualizzato un elenco di nodi taggati con quel termine.

Sembra che sarebbe una funzionalità abbastanza comune ma non riesco a trovare alcuna soluzione in grado di gestire una profondità arbitraria, in particolare se non tutti gli alberi a termine scendono alla stessa profondità.

Una soluzione ideale sarebbe quella che utilizza Views 3, Contexts, EntityFieldQueries o qualsiasi altra cosa ben supportata in Drupal 7.

Sono in grado di fare quasi esattamente quello che voglio facendo una semplice visione con tre nodi: relazioni di termine (termine, genitore del termine e genitore del padre del termine) e uso quelle per filtri contestuali sequenziali. L'unico problema è che se c'è un nodo con un termpath di profondità troppo bassa, viene elencato come "non classificato" e genera un collegamento morto. Invece di farlo, vorrei che si collegasse al prossimo termine figlio disponibile.

Risposte:


23

Ho trovato un modo per farlo solo con il modulo Views. Non è perfetto - non genera un bel URL e il pangrattato con il lignaggio della tassonomia come farebbe la mia soluzione per una tassonomia di una sola profondità.

Browser di profondità statica

Per una tassonomia di profondità statica (in cui tutti i termini hanno la stessa profondità di termini figlio), si dovrebbe fare quanto segue:

  1. Crea una vista di nodi
  2. Aggiungi relazione al termine tassonomia (Termine)
  3. Aggiungi relazione al termine di tassonomia padre, accessibile tramite Term (padre)
  4. Aggiungi relazione al termine di tassonomia padre, accessibile tramite Padre (Padre padre)
  5. Ripeti il ​​passaggio 4 tutte le volte necessarie per la profondità della tua tassonomia.
  6. Aggiungi filtri contestuali per ognuno e assicurati che siano nell'ordine corretto. Impostare per visualizzare un riepilogo quando il filtro non è nell'URL.
  7. Probabilmente vorrai sovrascrivere il breadcrumb e il titolo per ciascun filtro.
  8. ???
  9. PROFITTO

Browser a profondità variabile

Per una tassonomia di profondità variabile (dove alcuni alberi dei termini hanno livelli di nidificazione più profondi di altri), è un po 'più complesso:

  1. Aggiungi un nuovo termine di primo livello (Foo) al tuo vocabolario e inserisci tutti gli altri termini sotto di esso.
  2. Crea una vista dei termini con una pagina che mostra i nomi dei termini
  3. Aggiungi filtro contestuale: Termine tassonomia: termine principale
  4. Quando il valore predefinito non è nell'URL, fornire il valore predefinito
  5. Imposta il valore predefinito sul nome del termine di livello superiore (Foo)
  6. Specificare i criteri di convalida
    • Convalida: termine di tassonomia
    • Criteri: il nome del tuo vocabolario
    • Tipo valore filtro: nome termine convertito in ID termine
  7. Fai clic sul pulsante "+ Aggiungi" nella parte superiore del pannello Viste per aggiungere un allegato alla vista.
  8. Aggiungi solo a questo allegato (sostituzione) Relazione: tassonomia termine: contenuto con termine
  9. Aggiungi a questo allegato solo (sovrascrivi) display: campi: titoli dei nodi collegati ai nodi e rimuovi (solo da questo allegato!) Display: campi: nome del termine
  10. Aggiungi a questo allegato solo (sostituisci) filtro contestuale: Termine tassonomia: Nome
  11. Quando il valore del filtro non è disponibile, fornire il valore predefinito: Valore non elaborato dall'URL: Componente percorso: 2 (o più se il percorso della pagina ha> 1 componente)
  12. Impostazioni degli allegati: Allega a: [nome della visualizzazione della pagina appena fatta]
  13. ???
  14. PROFITTO

Schermate dell'interfaccia utente di Views come riferimento: inserisci qui la descrizione dell'immagine


Ben fatto! Valorizzare sia la domanda che la risposta: sembra una cosa abbastanza comune da fare e la tua soluzione è migliore di qualsiasi cosa abbia trovato mentre cercavo inizialmente di rispondere.
aendrew

8
  1. Creare una vista del tipo Tassonomia
  2. Aggiungi un filtro contestuale del tipo Termine tassonomia: termine principale
  3. Imposta Fornisci valore predefinito e mantienilo fisso. fornire l'ID termine del primo termine principale
  4. Aggiungi ID termine tassonomia come campo ed Escludilo dalla visualizzazione
  5. Aggiungi un termine di tassonomia Nome fai clic su out inserisci questo campo come link; inserisci il link come "path-you-set-in-view / [tid]"
    Nota: dovresti deselezionare "Collega questo campo alla sua pagina dei termini della tassonomia"

Quando visiti la pagina di visualizzazione, vedresti i figli del genitore principale; come nell'esempio otterresti:

  • term1
  • term2

Facendo clic su Term1 otterresti i bambini. Fino a quando non raggiungi il termine 1.1.1. Non otterrai alcun risultato se fai ancora clic su term1.1.1. Per raggiungere questo obiettivo, dobbiamo creare un altro blocco di vista nella vista sopra.

  1. Aggiungi un blocco
  2. Rimuovi il filtro contestuale esistente e il campo
    Nota: quando li rimuovi assicurati di selezionare Questa pagina (Over Ride) dal menu a discesa in alto accanto a Per altri saggi i campi e i filtri contestuali che hai creato nella pagina sparirebbero .
  3. Aggiungi un nuovo filtro contestuale Termine tassonomia: ID termine
  4. Aggiungi una relazione Termine tassonomia: contenuto con termine
  5. Aggiungi il titolo del contenuto e utilizzi la relazione dal menu a discesa in alto.
  6. Salvare la vista e tornare alla pagina che creiamo (questo è un altro aspetto saggio che non saresti in grado di completare il passaggio successivo
  7. Aggiungi un campo nel FOOTER O HEADER
  8. Seleziona "Globale: Visualizza area" dall'elenco e seleziona il blocco che abbiamo creato dal menu a discesa Visualizza per inserire mentre sei lì seleziona Eredita i filtri contestuali in modo che possiamo passare anche il valore da questa vista al blocco
  9. Selezionare Visualizza anche se la vista non ha alcun risultato in modo che quando questa vista non mostra il risultato il blocco verrà comunque mostrato

Salva la vista e il gioco è fatto.


Ho seguito la chiara spiegazione di Mohammed Shameem. Grazie, funziona perfettamente !!
Steven,

3

Penso che ciò che desideri sia Views Tree , un modulo contrib che utilizza Views per costruire un albero di termini di tassonomia.

(Dammi un secondo e scriverò una breve guida su come usarlo visualizzare i campi fiscali)

Apparentemente quel modulo ha un problema che gli impedisce di lavorare con i termini della tassonomia. Boo.

Detto questo, ho trovato il seguente codice che sembra fare quello che vuoi (puoi farlo visualizzare / nascondere elementi attraverso un codice jQuery piuttosto rudimentale):

<?php

// The ID of the taxonomy vocabulary for which you'd like to create a nested list
$vid = 10;

$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);

print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
  $diffdepth = 0;
  if ($term->depth > $depth) {
    print "\n<ul>\n<li>";
    $depth = $term->depth;
    $num_at_depth = 0;
  }
  if ($term->depth < $depth) {
    $diffdepth = $depth - $term->depth;
    while ($diffdepth > 0) {
      print "</li>\n</ul>\n";
      $diffdepth--;
    }
    $depth = $term->depth;
  }
  if (($term->depth == $depth) && ($num_at_depth > 0)) {
    print "</li>\n<li>";
  }
  print l($term->name, 'taxonomy/term/' . $term->tid);
  $num_at_depth++;
}
print "</li>\n</ul>\n";

Tramite " Elenchi di categorie nidificate con collegamenti a pagine ".


Ho abilitato quel modulo e ho provato a sperimentarlo e ho due problemi: 1. Sospetto che ti dia solo un elenco semplice, non un'esperienza di navigazione multi-paging e 2. Non riesco a farlo funzionare. Un how-to sarebbe molto utile.
Bet,

Risposta aggiornata. Ci scusiamo, apparentemente Views Tree ha un problema aperto riguardo ai termini della tassonomia. Risposta alternativa pubblicata.
aendrew

Ciò sembra fornire un semplice elenco nidificato anziché un browser con paginazione sequenziale.
Beth,

@beth: basterebbe scrivere jQuery che mostra / nasconde elementi di tale elenco quando si fa clic sugli elementi padre / figlio?
Annunciato il

Non voglio che dipenda da JavaScript.
Bet

0

Se vuoi solo avere una serie di pagine dinamiche di navigazione in tassonomia, allora vorrei andare nel modo seguente, richiedendo 3 visualizzazioni + modulo di visualizzazione tassonomia che ti consente di utilizzare le viste per visualizzare il contenuto delle taxonomy/term/%pagine:

  1. Termini di primo livello : elenca i termini il cui genitore è nullo
  2. Termini di medio livello : elenca i termini il cui genitore NON è nullo. Nessun risultato: visualizza Visualizza # 3
  3. Nodi con termini : elenca i nodi contrassegnati con termini.

Dato che probabilmente le viste 1 e 2 avranno un tema simile, potresti prendere in considerazione l'idea di unirle come display in un'unica vista: sarebbe più facile da gestire.

Ho usato con successo questo approccio per la mia tassonomia. Fortunatamente era omogeneo ad ogni livello - un determinato ramo terminava con foglie (nodi) o rami (termini), ma non entrambi. Se questo sarebbe un limite, si prega di testarlo prima.

Naturalmente questo è uno "pseudo-codice". Vorresti impostare convalide e filtri e un bel modello pathauto dall'aspetto logico per riflettere la struttura.

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.