Jak utworzyć zagnieżdżone drzewo z terminami i węzłami w Widoku 3?


22

Muszę stworzyć coś podobnego:

Kolory (słownictwo)

  • Czerwony (termin)
    • Ciemny (termin)
      • Węzeł 1
      • Węzeł 2
    • Światło (termin)
      • Węzeł 3
      • Węzeł 4
  • Niebieski (termin)
    • Węzeł 5
    • Węzeł 6
  • Zielony (termin)
    • Węzeł 7
    • Węzeł 8

(Punktory są wcięciami.)
Czy jest na to sposób w Drupal 7 i widokach 3? Jeśli nie, czy jest na to inny sposób?


Aby wyjaśnić - jak być może źle zrozumiałem twoje pytanie - chcesz wyświetlić taką strukturę na jednej stronie?
Maciej Zgadzaj,

Tak, tylko na 1 stronie
iStryker 24.09.11

Odpowiedzi:


15

Dzięki refino znalazłem fajne rozwiązanie przy użyciu następujących modułów:

Poniżej znajduje się wyjaśnienie:

  1. Najpierw utwórz nową taksonomię (nazwijmy ją „Folderem”)
  2. Następnie utwórz nowy typ zawartości (nazwijmy go „Element”) z polem odwołania do taksonomii „Folder”
  3. Utwórz nowy widok „Treść” (nazwijmy go „Widok elementu”)
  4. Wybierz wyświetlanie pola
  5. Dodaj filtr kontekstowy do pola referencyjnego terminu
  6. Utwórz nowy widok „Taksonomia” (nazwijmy go „Drzewo folderów”)
  7. Dodaj 2 pola (nazwa terminu i identyfikator terminu). Drugie pole można wyłączyć z wyświetlania
  8. W związku: dodaj „termin nadrzędny”
  9. Dodaj trzecie pole (identyfikator terminu) i przypisz je do relacji nadrzędnej. To pole można wyłączyć z wyświetlania
  10. Wybierz Format „Drzewo (model adiakencji)” i wybierz w parametrach: Lista uporządkowana + Pole główne (Twoja pierwsza tid), Pole nadrzędne (Twoja tid przypisana do relacji nadrzędnej). Powinieneś teraz mieć ładne drzewo z zagnieżdżonymi wszystkimi terminami
  11. Dodaj czwarte pole „Globalny: widok” (zawiera to Widok pola Widoku) i wybierz „Widok elementu”, wyświetl Master add [tid] w polu tekstowym Argumenty

Mam nadzieję, że to pomoże

Twoje zdrowie

Edytuj przez iStryker : Oto, co dostałem. Jedyną rzeczą, którą zmieniłem, było ustawienie widoku elementu w widoku tabeli i usunięcie domyślnych klas (wierszy i pasków).

Zdjęcie produktu końcowego iStryker


Świetna pomoc z tego komentarza. Drobna uwaga: możesz chcieć zmienić nazwę pól (tytuły administracyjne), ponieważ w menu rozwijanych ustawień VT oba pola „Identyfikator terminu” będą nierozróżnialne.
Artur

Ta odpowiedź dała mi 90%. Musiałem usunąć domyślne klasy z każdego pola; Usuń klasy tabel w widoku „Widok elementu”; Trochę tematu
iStryker,

Dodałem krok, aby zmniejszyć liczbę duplikatów w widoku zawartości. Ponadto pole „Argumenty” w polu Globalny: widok ma teraz etykietę „Filtry kontekstowe”, a tokenem do użycia jest „[! Tid]”.
othermachines

Czy jest to możliwe, ale z grupami organicznymi zamiast taksonomii?
IamOnStage

14

Utworzyłem trzy widoki w Drupal 7.8 i Widoki 3 + pole Widoki, zagnieżdżając jeden widok do drugiego za pomocą Dołącz widok i otrzymałem taki wynik (w załączeniu). wprowadź opis zdjęcia tutaj

Jak to zrobić krok po kroku:

  1. Utwórz słownictwo „Kolory” i wypełnij je tagami.

  2. Utwórz nowy widok węzłów systematyki Kolory - nazywam to „Węzłami kolorów”

2.1 Tabela formatów, Ustawienia: Pole grupowania: Taksonomia: Nazwa

2.2 Zaawansowane filtry kontekstowe: Termin taksonomiczny: Termin macierzysty

2.3 Zaawansowane relacje: Pojęcie taksonomii: Treść z wykorzystaniem koloru

2.4 Zestaw pól: Pojęcie taksonomii: Identyfikator terminu, Pojęcie taksonomii: Nazwa, (kolor_pola) Treść: Tytuł

2.5 Kryteria filtrowania: Pojęcie taksonomii: Słownictwo (= Kolory)

2.6 Jeśli chcesz, możesz także ustawić „Wyklucz z wyświetlania” dla Identyfikatora terminu, Taksonomia: Nazwa

2.7 Ustaw ścieżkę: / nodes-of-colours /%

2.8 Ustaw brak zachowania wyników: Globalny: Zobacz obszar (wrócimy do tego później) 2.9 zapisz

3. Utwórz nowy widok węzłów taksonomii Kolory - nazywam to „Węzłami kolorów 2”

3.1 Tabela formatów, Ustawienia: Pole grupowania: brak

3.2 Zaawansowane filtry kontekstowe: Pojęcie taksonomii: Identyfikator terminu

3.3 Zaawansowane relacje: Pojęcie taksonomii: Treść w kolorze

3.4 Ustaw pola: Pojęcie taksonomii: Identyfikator terminu, Pojęcie taksonomii: Nazwa, (kolor_pola) Treść: Tytuł

3.5 Kryteria filtrowania: Pojęcie taksonomii: Słownictwo (= Kolory)

3.6 Jeśli chcesz, możesz także ustawić „Wyklucz z wyświetlania” dla Identyfikatora terminu, Taksonomia: Nazwa

3.7 Ustaw ścieżkę: / nodes-of-colors-2 /%

3.8 Zachowanie bez wyników: Globalne: brak

3.9 Zapisz

Wróć i ponownie edytuj „Węzły kolorów”

4.1 przejdź do Ustaw zachowanie bez wyników: Globalne: Zobacz obszar

4.2 Ustaw Widok, aby wstawić: Widok: nodes_of_colors2 Wyświetl: strona

4.3 zestaw Dziedzicz filtry kontekstowe

4.4 zapisać

5 Wróć do widoków ponownie (Typ terminu)

5.1 Utwórz nowy widok węzłów systematyki Kolory - nazywam to „drzewem kolorów”

5.1 Tabela formatów, Ustawienia: Pole grupowania: brak

5.2 Zaawansowane filtry kontekstowe: brak

5.3 Zaawansowane relacje: Termin taksonomiczny: Termin macierzysty

5.4 Ustaw pola: Pojęcie taksonomii: Identyfikator terminu, Pojęcie taksonomii: Identyfikator terminu, Pojęcie taksonomii: Nazwa, Widok: Dołącz widok (Dołącz widok)

5.5 Kryteria filtrowania (1): Pojęcie taksonomii: Słownictwo (= Kolory)

5.6 Kryteria filtrowania (2): (macierzysty) Taksonomia: Termin

5.7 Jeśli chcesz, możesz również ustawić opcję „Wyklucz z wyświetlania” dla Identyfikatora terminu i etykietę Dołącz widok

5.8 Ustaw ścieżkę: / colors-tree

5.9 Brak zachowania wyników: brak

5.10 zapisz

... i nareszcie powinno być.


czy możesz wyjaśnić „5.4 ustaw pola… widok: dołącz widok” nieco więcej. Nigdzie nie widzę takiej opcji. Dzięki
uwe

Przepraszam, że nie napisałem Użyłem Widoki 7.x-3.0-rc1 + Widoki Pole 7.x-1.0-rc1
Refineo

ok dziękuję. Postępowałem zgodnie z instrukcjami dotyczącymi kolejki problemów, a także drupal.org/node/1171604
uwe

Wow, ta odpowiedź zyskała szerokie uznanie w ciągu 7 dni. Czy ktoś to jednak przetestował, czy ty / ona tylko poparłaś opinię, ponieważ @Refineo udzielił najbardziej szczegółowej odpowiedzi?
iStryker,

Próbowałem ponownie tego przewodnika i nie działałem. Nienawidziłem was wszystkich, którzy głosowali na to pytanie w zeszłym tygodniu bez testów
iStryker,


3

Jeśli chcesz uzyskać vid z adresu URL, użyj następującego kodu.

$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;

}

Lub użyj następującego kodu.

$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

Oczywiście jest:

  1. Skonfiguruj swoje słownictwo hierarchiczne,
  2. Dodaj go do dowolnego wybranego typu treści,
  3. Utwórz widok z listą węzłów na podstawie tego typu treści z filtrem kontekstowym :

    • albo „Treść: ma identyfikator terminologii taksonomicznej” - jeśli chcesz wyświetlić listę tylko węzłów przypisanych do określonego terminu,
    • lub „Treść: ma identyfikator terminologii taksonomicznej (z głębokością)” - jeśli chcesz wyświetlić listę węzłów przypisanych do określonego terminu, a także do jego warunków potomnych.

      W takim przypadku w konfiguracji filtra musisz ustawić głębokość - ile poziomów poniżej (lub powyżej) chcesz, aby ten filtr działał.

Następnie, zakładając, że URL twojego widoku to http://mysite.com/myview i „Red” tid = 1, jeśli wejdziesz na http://mysite.com/myview/1 , wyświetli się lista wszystkich węzłów przypisanych do jednego z określenia „czerwony”, „ciemny” i / lub „jasny”.


Nie szukam odpowiedzi na konkretny termin. Szukam widoku całego słownictwa
iStryker,

I dokładnie to opisałem.
Maciej Zgadzaj

2

Możesz użyć modułu menu Taksonomia . Oto cytat na ten temat (ze strony projektu modułu):

Z łatwością przekształca słowniki taksonomii w menu!

Cechy:

  • Menu niestandardowe według słownictwa
  • Używa domyślnej ścieżki terminu taksonomii lub ścieżek niestandardowych
  • Zintegruj z widokami
  • Zintegruj z Pathauto: użyj aliasu adresu URL / ścieżki
  • Nie koliduje z innymi modułami menu

Witamy w Drupal SE! taxonomy_menu to fajny projekt i może to zrobić ładnie. OP chce jednak to zrobić w Widoku.
AyeshK,

0

Próbuję osiągnąć to samo, ale nie znalazłem wiele dostępnych w D7. Moduł Bloki taksonomii robi to w bloku - nie w widokach.


0

Uważam, że znalazłem jeszcze inny sposób rozwiązania tego problemu i uważam, że jest to prostsze niż w przypadku pozostałych rozwiązań. Nie wymaga żadnych dodatkowych modułów i potrzebujesz tylko jednego widoku.

Zakładając, że utworzono dwupoziomowe hierarchiczne słownictwo (Kolory) i typ zawartości z terminem odnoszącym się do tego słownika, wykonaj następujące czynności:

  1. Utwórz nowy widok i filtruj według „Słownictwo taksonomii: Nazwa maszyny (= Kolory)”
  2. Dodaj relacje: (1) Taxonomy term: Content using Colori (2)Taxonomy term: Parent term
  3. Dodaj pola do Widoku: (1) Title(wybierz field_colorw „Relacja” i wymagaj tej relacji ), (2) Taxonomy term name(nie używaj relacji i wyklucz z wyświetlania) (3) Taxonomy term name(tak, ponownie, tym razem wybierz Parentrelację i wyklucz z wyświetlacza).
  4. Teraz zgrupuj go, klikając Ustawienia formatu: (1) grupowanie 1:, (Parent) Taxonomy term: Name(2)Taxonomy term: Name

Gotowy. Jeśli masz więcej niż dwa poziomy, po prostu dodaj inny Związek Rodzica, używając Rodzica jako związku.

EDYCJA: jeśli nie potrzebujesz związku, skończysz z duplikatami. Rodzice zostaną wymienieni dwukrotnie, jeśli mają podrzędne terminy, do których odwołują się węzły. Ogranicza to nieco odpowiedź w kategoriach najwyższego poziomu bez węzłów, które się do niej odwołują. Ponadto, ponieważ sortowanie jest prawdopodobnie ważne, posiadanie treści odwołujących się do terminu najwyższego poziomu może potencjalnie powodować problemy w zależności od potrzeb wyświetlania.


Nie ma filtru „Słownictwo taksonomii: Nazwa maszyny (= Kolory)” do momentu dodania relacji. Podejrzewam, że pierwszym krokiem jest bycie drugim. Nie mogłem również zrozumieć, jak dodać tytuł pola, wybierając pole_kolor w „Relacji”.
Dimetry
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.