Nazwa terminu systematyka jako filtr kontekstowy do wyświetlenia

18

W D7 udało mi się przefiltrować widok według nazwy terminu systematyki pobranej z adresu URL. Przykładem może być ten adres URL

http://www.gbyte.co/tags/drupal-planet/rss.xml

„Drupal-planet” zostałby przekonwertowany na identyfikator terminu taksonomii, który następnie odpowiednio odfiltrowałby wyniki widoku.

Teraz skonfigurowałem odpowiedni widok D8 z filtrem kontekstowym „Treść: Tagi (znaczniki_pola)”, przy czym znaczniki_pola są polem taksonomii. Jednak widok D8 pokaże wyniki tylko wtedy, gdy przekażę rzeczywisty identyfikator terminu do adresu URL w następujący sposób:

http://www.gbyte.co/tags/9/rss.xml

Chciałbym, aby działał również z nazwą nazwa, tak jak zrobił to D7. Brakuje funkcji lub czy muszę inaczej skonfigurować widok?

gbyte.co
źródło
Jakieś wieści dotyczące tego? Mam ten sam problem
jeroen

Odpowiedzi:

20

Nazwa Term konwertowane do Term ID filtrujących wygląda, że brakuje dla D8 Views.

Jednym z obejść konstruktora witryny jest dodanie relacji , warunków taksonomii w węźle, a następnie dodanie terminu taksonomii: Filtr nazw do filtrów kontekstowych przy użyciu wyżej wspomnianej relacji. Zaznaczając pole wyboru Określ kryteria walidacji , ustaw Walidator na nazwę Taksonomia i zaznacz odpowiednią Taksonomię do filtrowania.

Shawn Conn
źródło
12
Pułapka konstruktora witryny w interfejsie D8 dodawania interfejsu kontekstowego: tytuł filtra kontekstowego to „Nazwa”, a kategoria to „Pojęcie taksonomii”. Wyszukiwanie „taksonomii” nie spowoduje wyświetlenia tego filtru, ponieważ przeszukiwany jest tylko tytuł i opis, a nie kategoria.
keithm
1
Dodatkowo można zastąpić tytuł ze {{ arguments.name }}w ustawieniach filtra kontekstowego.
cptstarling
3

Dla uzupełnienia, w momencie pisania pytania udało mi się obejść ten problem, konwertując nazwę terminu systematyki z adresu URL na identyfikator terminu w views_hook_pre_view (), a następnie wykorzystując go jako dane wejściowe dla filtru kontekstowego który akceptuje identyfikatory taksonomii.

Oto kod haka widoków:

/**
 * Implements hook_views_pre_view().
 */
function my_module_views_pre_view(\Drupal\views\ViewExecutable $view, $display_id, array &$args) {
  if ($view->id() == 'blog' && $display_id == 'feed') {
    if (isset($args[0])) {
      $term = taxonomy_term_load_multiple_by_name($args[0], 'tags');
      if (empty($term)) {
        $term = taxonomy_term_load_multiple_by_name(str_replace("-", " ", $args[0]), 'tags');
      }
      if (!empty($term)) {
        $tid = key($term);
        $args[0] = $tid;
      }
    }
  }
}
gbyte.co
źródło
2

Aby rozwinąć odpowiedź Shawna Conna:

  • W konfiguracji widoku, w obszarze Zaawansowane -> Relacje kliknij „Dodaj”
  • Teraz wybierz „Warunki taksonomii w węźle”
  • Na następnym ekranie wybierz słownictwo „tagi” i wymagaj relacji.
  • Teraz w Zaawansowane -> Filtry kontekstowe kliknij „Dodaj”
  • W obszarze „Gdy filtr NIE jest dostępny” wybierz „Podaj wartość domyślną”, „Surowa wartość z adresu URL”. Wybierz inne opcje odpowiednie do swoich potrzeb.
  • W obszarze „Kiedy filtr jest dostępny lub podana jest wartość domyślna”, wybierz „Określ kryteria walidacji” i wybierz „Nazwa terminu taksonomii” dla walidatora. Wybierz słownictwo „tagi”, a następnie kliknij Zastosuj.

Mam nadzieję, że to pomaga!

axlroach
źródło
1

Nie wiem, czy nadal masz ten problem, ale udało mi się utworzyć relację dla „Taksonomii terminów w węźle” przy użyciu pożądanego słownika taksonomii, a następnie utworzyć filtr kontekstowy przy użyciu tej relacji dla „Taksonomii: Nazwa”, która pozwala do weryfikacji na podstawie nazwy zamiast TID.

Todd Bloom
źródło
2
Mam ten sam problem opisany w tym pytaniu, czy możesz być bardziej jasny. Już ustawiłem relację, ale filtr kontekstowy działa tylko z nazwą tid zamiast nazwy terminu. Oczywiście mówimy o D8. Z góry dziękuję.
Vagner,
1

@kiethm podał prawidłowy sposób podejścia do tego - w filtrach kontekstowych musisz wybrać „Nazwa”, a nie „Identyfikator terminu taksonomii”, a następnie ustawić kryteria walidacji, aby użyć „Nazwy terminu taksonomii” .

wiewiórka ognista
źródło
1

Hej, szukałem tej odpowiedzi od jakiegoś czasu. Dla każdego takiego jak ja, który szuka sposobu, aby to zadziałało, po raz pierwszy udało mi się osiągnąć sukces, częściowo dzięki wynikom drupal.org, a następnie: http://redcrackle.com/blog/adding-contextual-filter -view-drupal-8

Używam Drupal 8 i Zircon. Jestem nowy, więc mogę używać niewłaściwych terminów. Chciałem utworzyć kontekstowe linki do obrazów w „Panel pierwszy kol. 1” na podstawie kategorii strony, na której ktoś jest. To, co zrobiłem, to przejdź do Struktura> Widoki> Karuzela (widok, który zawiera zdjęcia w tym regionie bloku)> Zaawansowane> Dodaj według filtrów kontekstowych> Ma identyfikator terminu taksonomii> wybierz w Podaj wartość domyślną: Identyfikator terminu taksonomii z adresu URL (który utworzył nie ma dla mnie sensu, ale cokolwiek)> wtedy zaznaczyłem wszystkie trzy pola: Załaduj domyślny filtr ze strony terminów, Załaduj domyślny filtr ze strony węzłów, to jest dobre dla powiązanych bloków taksonomii, Ogranicz terminy według słownictwa. Następnie dla Vocabularies sprawdziłem Kategorie.

PHEW! Wreszcie! Dziękuję wam wszystkim za skierowanie mnie we właściwym kierunku! Nie mogłem wyjaśnić, dlaczego to działa, ale cokolwiek to działa i będę nadal zatrudniony.

Seizethecarp
źródło
1

Napisałem mały moduł, aby przywrócić brakującą funkcjonalność i przywrócić ją do prawidłowego działania:

https://www.drupal.org/project/views_taxonomy_term_name_into_id

Ponownie dodaje walidator argumentu „Konwertuj nazwę terminu na identyfikator” dla terminów taksonomicznych używanych w „filtrach kontekstowych” w widokach. Zobacz stronę projektu, aby uzyskać więcej informacji i instrukcji.

Enjoy, -Derek (dww)

Derek
źródło
0

Możesz to zrobić, dodając treść: ma identyfikator terminu taksonomii w filtrze kontekstowym, a następnie możesz użyć taksonomii w kontekście kontekstowym, dostosowując kryteria filtru

wprowadź opis zdjęcia tutaj

Adi
źródło
Zrobiłeś zrzut ekranu z instalacji D7. W D8 nie ma walidatora „Pojęcie taksonomii”. Zamiast tego istnieje „Identyfikator terminu taksonomii” lub „Nazwa terminu taksonomii”, które nie akceptują nazwy taksonomii z adresu URL. Akceptują tylko identyfikator.
gbyte.co,
0

Osiągnąłem to w Drupal-8, stosując filtr kontekstowy: „Taksonomia: Nazwa”

Następnie podaj wartość domyślną Typ Taksonomia Termin ID Z adresu URL

Następnie określ następujące kryteria weryfikacji:

wprowadź opis zdjęcia tutaj

Rimi B.
źródło