Come faccio a creare un albero nidificato con termini e nodi con Views 3?


22

Ho bisogno di creare qualcosa di simile come questo:

Colori (vocabolario)

  • Rosso (termine)
    • Dark (termine)
      • Nodo 1
      • Nodo 2
    • Luce (termine)
      • Nodo 3
      • Nodo 4
  • Blu (termine)
    • Nodo 5
    • Nodo 6
  • Verde (termine)
    • Nodo 7
    • Nodo 8

(I punti elenco sono rientranti.)
C'è un modo per farlo con Drupal 7 e le viste 3? In caso contrario, c'è un altro modo per farlo?


Per chiarire - come forse ho frainteso la tua domanda - vuoi mostrare una struttura come questa su una pagina?
Maciej Zgadzaj,

Sì, solo su 1 pagina
iStryker,

Risposte:


15

Grazie a refino, ho trovato una buona soluzione usando i seguenti moduli:

Di seguito trovi la spiegazione:

  1. Innanzitutto crea una nuova tassonomia (chiamiamola "Cartella")
  2. Quindi, crea un nuovo tipo di contenuto (chiamiamolo "Elemento") con un campo di riferimento termine nella tassonomia "Cartella"
  3. Crea una nuova vista "Contenuto" (chiamiamola "Vista elemento")
  4. Scegli Field Display
  5. Aggiungi un filtro contestuale al campo di riferimento del termine
  6. Crea una nuova vista "Tassonomia" (chiamiamola "Albero delle cartelle")
  7. Aggiungi 2 campi (nome termine e ID termine). Il secondo campo può essere escluso dalla visualizzazione
  8. In relazione: aggiungi un "termine principale"
  9. Aggiungi un terzo campo (id termine) e assegnalo alla tua relazione principale. Questo campo può essere escluso dalla visualizzazione
  10. Scegli Formato "Albero (modello di adiacenza)" e seleziona nei parametri: Elenco ordinato + Campo principale (la tua prima marea), Campo principale (la tua marea assegnata alla relazione principale). Ora dovresti avere un bel albero con tutti i termini nidificati
  11. Aggiungi un quarto campo "Global: View" (questo viene fornito con Vista Field View) e scegli la tua "Vista elemento", visualizza Master aggiungi [tid] nel campo di testo Argomenti

Spero che questo aiuto

Saluti

Modifica di iStryker : questo è quello che ho ottenuto. L'unica cosa che ho cambiato è stata rendere Element View una vista tabella e rimuovere le classi predefinite (riga e striscia).

Immagine del prodotto finale di iStryker


Un grande aiuto da questo commento. Solo una piccola nota: potresti voler rinominare i campi (titoli amministrativi) perché nei menu a discesa delle impostazioni VT entrambi i campi "Term ID" saranno indistinguibili.
Artur,

Questa risposta mi ha portato al 90% lì. Avevo bisogno di rimuovere le classi predefinite su ciascun campo; Rimuovere le classi di tabella nella vista "Vista elemento"; Tema un po '
iStryker l'

Ho aggiunto un passaggio per ridurre i duplicati nella vista Contenuto. Inoltre, il campo "Argomenti" in Global: View ora è etichettato "Filtri contestuali" e il token da utilizzare è "[! Tid]".
macchine,

È possibile farlo ma con gruppi organici anziché tassonomia?
IamOnStage

14

Ho creato tre viste nel campo Drupal 7.8 e Views 3 + Views, annidando una vista in un'altra usando Includi vista e ho ottenuto un tale risultato (allegato). inserisci qui la descrizione dell'immagine

Procedura dettagliata:

  1. Crea il vocabolario "Colori" e riempilo con i tag.

  2. Crea una nuova vista dei nodi della tassonomia Colori - Lo chiamo "Nodi di colori"

2.1 Tabella dei formati, Impostazioni: Campo di raggruppamento: Termine di tassonomia: Nome

2.2 Filtri contestuali avanzati: Termine tassonomia: termine principale

2.3 Relazioni avanzate: termine di tassonomia: contenuto che utilizza il colore

2.4 Imposta campi: Termine tassonomia: ID termine, Termine tassonomia: Nome, (field_color) Contenuto: Titolo

2.5 Criteri di filtro: Termine tassonomia: Vocabolario (= Colori)

2.6 Se lo desideri, puoi anche impostare "Escludi dalla visualizzazione" per Term ID, Termine tassonomia: Nome

2.7 Imposta percorso: / nodes-of-colours /%

2.8 Nessun comportamento impostato: Globale: area di visualizzazione (torneremo più avanti) 2.9 salvataggio

3.Crea una nuova vista dei nodi della tassonomia Colori: io lo chiamo "Nodi di colori 2"

3.1 Tabella dei formati, Impostazioni: campo di raggruppamento: nessuno

3.2 Filtri contestuali avanzati: Termine tassonomia: ID termine

3.3 Relazioni avanzate: termine di tassonomia: contenuto che utilizza il colore

3.4 Imposta campi: Termine tassonomia: Term ID, Termine tassonomia: Nome, (field_color) Contenuto: Titolo

3.5 Criteri di filtro: Termine tassonomia: Vocabolario (= Colori)

3.6 Se lo desideri, puoi anche impostare "Escludi dalla visualizzazione" per ID termine, Termine tassonomia: Nome

3.7 Imposta percorso: / nodes-of-colors-2 /%

3.8 Nessun comportamento impostato: Globale: nessuno

3.9 Salva

Torna indietro e modifica nuovamente "Nodi di colori"

4.1 vai a Imposta comportamento senza risultati: Globale: Visualizza area

4.2 Impostare Visualizza per inserire: Visualizza: nodes_of_colors2 Visualizza: pagina

4.3 impostare Eredita i filtri contestuali

4.4 salva

5 Torna di nuovo a Visualizzazioni (Digita termine)

5.1 Creare una nuova vista dei nodi della tassonomia Colori - Lo chiamo "Albero dei colori"

5.1 Tabella dei formati, Impostazioni: campo di raggruppamento: nessuno

5.2 Filtri contestuali avanzati: nessuno

5.3 Rapporti avanzati: termine di tassonomia: termine principale

5.4 Imposta campi: Termine tassonomia: ID termine, Termine tassonomia: ID termine, Termine tassonomia: Nome, Visualizza: Includi vista (Includi vista)

5.5 Criteri di filtro (1): Termine di tassonomia: Vocabolario (= Colori)

5.6 Criteri di filtro (2): (padre) Termine di tassonomia: termine

5.7 Se lo desideri, puoi anche impostare "Escludi dalla visualizzazione" per Term ID e un'etichetta di Includi vista

5.8 Imposta percorso: / colors-tree

5.9 Nessun comportamento da impostare: nessuno

5.10 salva

... e questo dovrebbe essere, finalmente.


puoi chiarire "5.4 set fields ... view: include view" un po 'di più. Non vedo un'opzione per questo da nessuna parte. Grazie
Uwe

Mi dispiace non aver scritto Ho usato Views 7.x-3.0-rc1 + Views Field 7.x-1.0-rc1
Refineo

ok grazie. Ho seguito anche alcune istruzioni sulla loro coda dei problemi drupal.org/node/1171604
uwe

Caspita, questa risposta ha ottenuto un enorme apprezzamento nel passaggio 7 giorni. Qualcuno ha testato questo, o hanno semplicemente votato perché @Refineo ha dato la risposta più dettagliata?
iStryker l'

Ho provato di nuovo questa procedura dettagliata e non ha funzionato. Ho odiato tutti voi che avete votato a favore di questa domanda è l'ultima settimana senza test
iStryker


3

Se si desidera ottenere il video dall'URL, utilizzare il seguente codice.

$vid = $_GET['vid'];
$tid = 0;
$level = 0;
print taxonomy_tree($vid, $tid, $level);
function taxonomy_tree($vid, $tid = 0, $level) {
  $children = taxonomy_get_children($tid, $vid);
  $output = '';
  if ($children) {
    $output .= '<ul>'; 
    foreach ($children as $child) {
      $level++;
      $output .= '<li class="taxonomy-tree-lvl' . $level . ' ">'; 
print $level;
      $output .= l($child->name, 'taxonomy/term/'. $child->tid) . '(' . taxonomy_term_count_nodes($child->tid) . ')'; 
      $output .= taxonomy_tree($vid, $child->tid, $level);
      $output .= '</li>';

      $level--; 
    }
    $output .= '</ul>'; 
  }

  return $output;

}

Oppure usa il seguente codice.

$vocabulary = taxonomy_vocabulary_load(2);//Here pass the vid
print $vocabulary->name;
$vid1 = $_GET['vid'];
if(!$vid1) {
$vid1 = 2;
print 'empty';
}
$vid = 2;
$parent = 0;
print get_child_terms($parent, $vid1);
 function get_child_terms($parent, $vid) {
      $sql = "SELECT td.tid, td.vid, td.name"
         . "  FROM {term_data} td"
         . "  JOIN {term_hierarchy} th on th.tid = td.tid"
         . " WHERE th.parent = %d"
         . "   AND td.vid = %d"
         . " ORDER BY td.weight, td.name";
    $terms = db_query($sql, $parent, $vid);
    $output = "";
    while ($aterm = db_fetch_object($terms)) {
        $output .= "<li>";
        $output .= l("$aterm->name", "taxonomy/term/$aterm->tid/all") . " ("
                .  taxonomy_term_count_nodes($aterm->tid) . ")</li>\n"
                .  get_child_terms($aterm->tid, $vid);
    }
    return ($output != "") ? "<ul style='list-style-type: none;
  margin: 0px 0px 0px 20px;
  padding: 0px;'>\n". $output ."</ul>\n" : "";
  }

2

Naturalmente c'è:

  1. Imposta il tuo vocabolario gerarchico,
  2. Aggiungilo a qualsiasi tipo di contenuto selezionato,
  3. Crea una vista che elenca i nodi da quel tipo di contenuto, con filtro contestuale :

    • "Contenuto: ha un ID termine tassonomia": se desideri elencare solo i nodi assegnati a un termine specifico,
    • o "Contenuto: ha un ID termine tassonomia (con profondità)" - se si desidera elencare i nodi assegnati a un termine specifico e ai relativi termini figlio.

      In questo caso, nella configurazione del filtro è necessario impostare la profondità: quanti livelli al di sotto (o al di sopra) si desidera che questo filtro funzioni.

Quindi, supponendo che l'URL della tua vista sia http://mysite.com/myview e 'Red' tid = 1, se vai su http://mysite.com/myview/1 , verranno elencati tutti i nodi assegnati a uno dei due termini "rosso", "scuro" e / o "chiaro".


Non sto cercando una risposta per un termine specifico. Sto cercando una vista per l'intero vocabolario
iStryker

Ed è esattamente quello che ho descritto.
Maciej Zgadzaj,

2

È possibile utilizzare il modulo del menu Tassonomia . Ecco una citazione al riguardo (dalla pagina del progetto del modulo):

Trasforma facilmente i tuoi vocabolari di tassonomia in menu!

Caratteristiche:

  • Menu personalizzato per vocabolario
  • Utilizza il percorso del termine di tassonomia predefinito o percorsi personalizzati
  • Integrazione con Views
  • Integrazione con Pathauto: utilizzare gli alias URL / percorso
  • Non interferisce con altri moduli di menu

Benvenuti in Drupal SE! taxonomy_menu è un progetto interessante e può farlo bene. OP vuole farlo in Views però.
AyeshK,

0

Sto cercando di ottenere lo stesso risultato ma non ho trovato molto disponibile in D7. Il modulo Taxonomy Blocks lo fa in un blocco, non in viste.


0

Credo di aver trovato un altro modo per risolvere questo problema e penso che sia più semplice del resto di queste soluzioni. Non comporta alcun modulo aggiuntivo e è necessaria solo una vista.

Supponendo di aver creato un vocabolario gerarchico a due livelli (Colori) e un tipo di contenuto con un termine riferimento a quel vocabolario, procedere come segue:

  1. Crea una nuova vista e filtra per "Vocabolario tassonomia: Nome macchina (= Colori)"
  2. Aggiungi relazioni: (1) Taxonomy term: Content using Colore (2)Taxonomy term: Parent term
  3. Aggiungi i campi alla vista: (1) Title(scegli field_colorin "Relazione" e richiedi questa relazione ), (2) Taxonomy term name(non usare la relazione ed escludi dalla visualizzazione) (3) Taxonomy term name(sì, ancora una volta, scegli questa Parentrelazione ed escludi dal display).
  4. Ora raggruppalo facendo clic su Impostazioni del formato: (1) raggruppamento 1:, (Parent) Taxonomy term: Name(2)Taxonomy term: Name

Fatto. Se hai più di due livelli, aggiungi semplicemente un'altra relazione di Parent usando Parent come relazione della relazione.

EDIT: se non hai bisogno della relazione finirai con i duplicati. I genitori verranno elencati due volte se hanno termini figlio a cui fanno riferimento i nodi. Quindi questo limita un po 'la risposta in termini di primo livello senza che i nodi che fanno riferimento non vengano visualizzati. Inoltre, poiché l'ordinamento è probabilmente importante, avere qualsiasi contenuto che fa riferimento a un termine di primo livello potrebbe potenzialmente causare problemi a seconda delle esigenze di visualizzazione.


Non esiste alcun filtro "Vocabolario tassonomia: Nome macchina (= Colori)" fino a quando non viene aggiunta la relazione. Sospetto che il primo passo sia quello di essere il secondo. Inoltre non sono riuscito a capire come aggiungere il campo campo quando si sceglie field_color in "Relazione".
Dimetry
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.