Czysty sposób budowania prostej przeglądarki taksonomii o dowolnej głębokości

23

Spędziłem dni próbując ustalić czysty sposób na wykonanie następujących czynności:

  1. Wyświetl listę wszystkich terminów najwyższego poziomu w słowniku wraz z linkami do terminów podrzędnych
  2. Po kliknięciu linku zostaniesz przeniesiony do listy dzieci tych warunków.
  3. Ad infinitum do terminu najniższego poziomu, dla którego zostanie wyświetlona lista węzłów oznaczonych tym terminem.

Wydaje się, że byłaby to dość powszechnie potrzebna funkcjonalność, ale nie mogę znaleźć żadnego rozwiązania, które poradziłoby sobie z dowolną głębokością, szczególnie jeśli nie wszystkie drzewa terminów schodzą na tę samą głębokość.

Idealnym rozwiązaniem byłoby takie, które wykorzystuje Widoki 3, Konteksty, EntityFieldQueries lub cokolwiek innego, co jest dobrze obsługiwane w Drupal 7.

Jestem w stanie zrobić niemal dokładnie to, co chcę, dokonując prostego widoku z trzech węzłów: relacji długoterminowych (Term, rodzica terminowi, a rodzic termin rodzic) i użytkownikiem tych, dla kolejnych filtrów kontekstowych. Jedynym problemem jest to, że jeśli istnieje węzeł ze ścieżką termiczną o zbyt małej głębokości, zostaje wymieniony jako „nieskategoryzowany” i generuje martwy link. Zamiast tego chciałbym, aby link do następnego dostępnego terminu potomnego był dostępny.

beth
źródło

Odpowiedzi:

23

Wymyśliłem sposób, aby to zrobić tylko z modułem Widoki. To nie jest idealne - nie generuje ładnego adresu URL i okruszków z linią taksonomii tak, jak zrobiłoby to moje rozwiązanie dla taksonomii o pojedynczej głębokości.

Przeglądarka statyczna głębokości

W przypadku taksonomii statycznej głębokości (gdy wszystkie terminy mają taką samą głębokość warunków potomnych), wykonaj następujące czynności:

  1. Utwórz widok węzłów
  2. Dodaj związek do terminu systematyki (Term)
  3. Dodaj relację do nadrzędnego terminu taksonomii, dostępnego przez Termin (nadrzędny)
  4. Dodaj relację do terminu nadrzędnego taksonomii, dostępnego za pośrednictwem rodzica (rodzica rodzica)
  5. Powtórz krok 4 tyle razy, ile jest to konieczne dla głębokości taksonomii.
  6. Dodaj filtry kontekstowe dla każdego z nich i upewnij się, że są w odpowiedniej kolejności. Ustaw wyświetlanie podsumowania, gdy filtr nie znajduje się w adresie URL.
  7. Prawdopodobnie będziesz chciał zastąpić bułkę tartą i tytuł dla każdego filtra.
  8. ???
  9. ZYSK

Przeglądarka o zmiennej głębokości

W przypadku taksonomii o zmiennej głębokości (gdzie niektóre drzewa terminów mają głębsze poziomy zagnieżdżenia niż inne), jest to nieco bardziej złożone:

  1. Dodaj nowy termin najwyższego poziomu (Foo) do swojego słownictwa i umieść pod nim wszystkie inne terminy.
  2. Utwórz widok terminów za pomocą strony, która wyświetla nazwy terminów
  3. Dodaj filtr kontekstowy: Pojęcie taksonomii: Pojęcie rodzica
  4. Jeśli wartość domyślna nie znajduje się w adresie URL, podaj wartość domyślną
  5. Ustaw wartość domyślną na nazwę terminu najwyższego poziomu (Foo)
  6. Określ kryteria walidacji
    • Walidator: termin taksonomia
    • Kryteria: nazwa twojego słownictwa
    • Typ wartości filtru: Nazwa terminu konwertowana na identyfikator terminu
  7. Kliknij przycisk „+ Dodaj” u góry panelu Widoki, aby dodać załącznik do widoku.
  8. Dodaj tylko do tego załącznika (zastąpienie) Związek: Taksonomia: Treść z terminem
  9. Dodaj tylko do tego załącznika (przesłonięcie) wyświetl: pola: tytuły węzłów połączone z węzłami i usuń (tylko z tego załącznika!) Wyświetl: pola: nazwa terminu
  10. Dodaj tylko do tego załącznika (zastąp) filtr kontekstowy: Taksonomia: Nazwa
  11. Jeśli wartość filtru nie jest dostępna, podaj wartość domyślną: Surowa wartość z adresu URL: składnik ścieżki: 2 (lub więcej, jeśli ścieżka do strony ma> 1 składnik)
  12. Ustawienia załączników: dołącz do: [nazwa wyświetlanej właśnie strony]
  13. ???
  14. ZYSK

Zrzuty ekranu interfejsu użytkownika w celach poglądowych: wprowadź opis zdjęcia tutaj

beth
źródło
Ładnie wykonane! Głosowanie zarówno na pytanie, jak i na odpowiedź - wydaje się, że to dość powszechne, a twoje rozwiązanie jest lepsze niż cokolwiek, co znalazłem podczas próby odpowiedzi.
aendrew
8
  1. Utwórz widok typu Taksonomia
  2. Dodaj filtr kontekstowy typu Termin taksonomia: Termin macierzysty
  3. Ustaw Podaj wartość domyślną i nie zmieniaj jej. podaj identyfikator terminu najwyższego terminu nadrzędnego
  4. Dodaj identyfikator terminu taksonomii jako pole i wyklucz go z wyświetlania
  5. Dodaj termin taksonomia Nazwa kliknij na out umieść to pole jako link; podaj link jako „path-you-set-in-view / [tid]”
    Uwaga: Należy odznaczyć „Połącz to pole z jego stroną terminu systematyki”

Gdy odwiedzasz stronę widoku, zobaczysz dzieci najwyższego rodzica; zgodnie z przykładem otrzymalibyście:

  • termin1
  • term2

Gdy klikniesz term1, dostaniesz dzieci. Aż do osiągnięcia terminu 1.1.1. Nie uzyskasz żadnego wyniku, jeśli klikniesz jeszcze termin 1.1.1. Aby to osiągnąć, musimy utworzyć jeszcze jeden blok widoku w powyższym widoku.

  1. Dodaj blok
  2. Usuń istniejący filtr kontekstowy i pole
    Uwaga: Po ich usunięciu upewnij się, że wybierzesz opcję Ta strona (Over Ride) z rozwijanego menu u góry obok. W przeciwnym razie pola i filtry kontekstowe utworzone na stronie również znikną .
  3. Dodaj nowy filtr kontekstowy Termin systematyki: Identyfikator terminu
  4. Dodaj relację Taksonomia: Treść z terminem
  5. Dodaj tytuł treści, a użyjesz relacji z menu rozwijanego u góry.
  6. Zapisz widok i wróć do strony, którą tworzymy (jest to ważne, w przeciwnym razie nie będziesz w stanie wykonać następnego kroku
  7. Dodaj pole w STOPNIU LUB NAGŁOWIE
  8. Wybierz „Globalny: Widok obszaru” z listy i wybierz blok, który utworzyliśmy z rozwijanego menu Widok, aby wstawić, gdy tam jesteś, zaznacz opcję Dziedzicz filtry kontekstowe , abyśmy również mogli przekazać wartość z tego widoku do bloku
  9. Sprawdzić wyświetlacz nawet jeśli widok ma żadnego rezultatu , tak że gdy pogląd ten nie pokazuje wynik blok będzie nadal pokazane

Zapisz widok i gotowe.

Mohammed Shameem
źródło
Postępowałem zgodnie z jasnym wyjaśnieniem Mohammeda Shameema. Dziękuję, działa idealnie !!
Steven
3

Myślę, że to, czego chcesz, to drzewo widoków , moduł contrib, który używa widoków do konstruowania drzewa terminów taksonomicznych.

(Daj mi sekundę, a napiszę, jak korzystać z niego, aby wyświetlić pola podatkowe)

Najwyraźniej w tym module występuje problem uniemożliwiający działanie z warunkami taksonomicznymi. Gwizd.

To powiedziawszy, znalazłem następujący kod, który wydaje się robić to, co chcesz (możesz sprawić, by wyświetlał / ukrywał elementy za pomocą dość podstawowego kodu jQuery):

<?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";

Poprzez „ Zagnieżdżone listy kategorii z linkami do stron ”.

Aendrew
źródło
Włączyłem ten moduł i próbowałem z nim eksperymentować i mam dwa problemy: 1. Podejrzewam, że daje tylko płaską listę, a nie wielostronicowe przeglądanie i 2. Nie mogę go uruchomić. Poradnik byłby najbardziej pomocny.
beth
Zaktualizowana odpowiedź. Przepraszamy, najwyraźniej Views Tree ma otwarty problem dotyczący: używania terminów taksonomicznych. Alternatywna odpowiedź wysłana.
aendrew
Wydaje się, że daje to prostą listę zagnieżdżoną zamiast przeglądarki z kolejnymi stronami.
beth,
@beth - Czy wystarczyłoby napisać jakieś jQuery, które pokazuje / ukrywa elementy tej listy po kliknięciu elementów nadrzędnych / podrzędnych?
aendrew
Nie chcę, żeby była zależna od JavaScript.
beth
0

Jeśli chcesz mieć tylko zestaw dynamicznych stron przeglądania taksonomii, wybrałbym następującą metodę, wymagającą 3 wyświetleń + moduł wyświetlania taksonomii , który pozwala używać widoków do wyświetlania zawartości taxonomy/term/%stron:

  1. Warunki najwyższego poziomu - wyszczególnij warunki, których rodzic ma wartość NULL
  2. Warunki na średnim poziomie - wymień warunki, których rodzic NIE jest pusty. Brak wyników: wyświetl Widok 3
  3. Węzły z warunkami - lista węzłów oznaczonych z warunkami.

Ponieważ widoki 1 i 2 będą prawdopodobnie tematycznie podobne, możesz rozważyć połączenie ich jako wyświetlaczy w jeden widok - łatwiej byłoby nim zarządzać.

Z powodzeniem zastosowałem to podejście do mojej taksonomii. Na szczęście był jednorodny na każdym poziomie - dana gałąź kończyła się liśćmi (węzłami) lub gałęziami (warunkami), ale nie obydwoma. Jeśli byłoby to ograniczenie, najpierw przetestuj.

Oczywiście jest to „pseudo-kod”. Chcesz skonfigurować sprawdzanie poprawności i filtry oraz ładne, logicznie wyglądające wzorce pathauto odzwierciedlające strukturę.

Artur
źródło