Jak działają filtry kontekstowe Widoki?

9

Próbuję ponownie owinąć głowę filtrami kontekstowymi! Użyłem go jakiś czas temu, ale znów byłem kompletnie zakłopotany. Oto, co próbuję zrobić:

  1. Wygeneruj stronę sklonowanego węzła treści z terminami taksonomii wstawionymi do tej sklonowanej strony.

np .: EXAMPLE.com/white-shoes/blue

Gdy użytkownik przejdzie do strony / white-shoes, wyświetli oryginalną stronę węzła zorientowaną na biały kolor. Teraz, jeśli użytkownik wyląduje na / white-shoes / blue, wyświetli tę samą stronę węzła, ale tym razem cała treść zostanie przepisana, zastępując biały kolor kolorem niebieskim.

W widokach musiałbym utworzyć wyświetlanie strony ze ścieżką:% /%

Teraz utworzę filtr kontekstowy, aby pobrać identyfikator NID. Dodaję Content: nid jako filtr kontekstowy. Wybieram PODAJ DOMYŚLNĄ WARTOŚĆ i umieszczam ten kod PHP:

$ x = drupal_lookup_path ('source', arg (0));

$ y = eksplodować ('/', $ x);

powrotu $ y 1 ;

Ten kod PHP zasadniczo konwertuje część adresu URL / white-shoes na NID. Ale to nie działa. Przetestowałem kod za pośrednictwem drush ev przez terminal i rzeczywiście otrzymałem zwrócony wynik, więc wiem, że działa.

Robię to samo dla nazwy terminu taksonomia i dodam do tego filtr kontekstowy. Tym razem wybieram PODAJ DOMYŚLNĄ WARTOŚĆ, wybieram SUROWĄ WARTOŚĆ Z URL i wybieram drugi argument.

wprowadź opis zdjęcia tutaj

Jak widać, gdy wprowadzę WARTOŚĆ PODGLĄDU dla filtru kontekstowego: AAA / BBB / CCC. Moja wartość domyślna jest ignorowana. To ma być drugi argument, ale tylko pierwszy. Spójrz na instrukcję SQL GDZIE, a zobaczysz, że dostaje AAA, kiedy powinna być BBB.

wprowadź opis zdjęcia tutaj

Pytanie brzmi: co robię źle, czy jest lepsze rozwiązanie tego, co chcę osiągnąć?

Patoshi パ ト シ
źródło
To brzmi głupio, ale czy mógłbyś podać trochę więcej szczegółów? Trochę czasu rozumiem, co próbujesz, a więcej o tym, jak próbujesz to zrobić. Zamiast używać wartości Raw lub Provide default, użyj Content ID z adresu URL. To zapewni identyfikator NID.
kyletaylored
cześć Kyle, nie ma Content ID od czasu lądowania na adresie: / white-shoes / blue .... adres URL / blue nie istnieje, ponieważ jest renderowany przez wyświetlenia. więc nie ma identyfikatora treści do pobrania ... musi przeanalizować pierwszy argument adresu URL, a następnie przekonwertować ten adres URL na ścieżkę NID.
Patoshi パ ト シ

Odpowiedzi:

5

Filtr kontekstowy służy do filtrowania, generowanie widoku przez argumenty URL, również możesz przekazać argumenty ręcznie w tym formacie:

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

gdzie „$ nazwa” to nazwa twojego widoku (np. „przykład_widoku”), a „$ display_id” to typ wyświetlania twojego widoku (np. „default”), a „$ arg1, $ arg2, $ arg3” to argumenty tak jak w adresie URL.

Argumenty adresów URL mają następującą strukturę:

http://example.com/arg_1/arg_2/arg_3 (arg_2 ma komponent ścieżki 2 (w widoku ustawień strony)).

Gdy wartość filtru nie jest dostępna:

oznacza to, że Drupal nie może znaleźć żadnego filtra.

Podaj wartość domyślną:

gdy wartość filtru nie jest dostępna, możesz użyć tej opcji, aby utworzyć filtr dla danych wyjściowych widoków, tym filtrem może być kod PHP (jeśli moduł filtru PHP jest włączony) lub można uzyskać jego wartość z argumentów URL -> (wartość surowa z adresu URL). Pole tekstowe Wyjątek pozwala oszukiwać wartość i wyświetlać wszystkie wyniki.

Gdy dostępna jest wartość filtru

w tym przypadku przeprowadzasz walidację zgodnie ze swoimi potrzebami i innymi opcjami, gdy drupal może znaleźć wartość filtru.

Reza Shadman
źródło
biorąc pod uwagę funkcję views_embed_view (). jak miałbym to załadować na moją ścieżkę podrzędną / white-shoes / blue? pamiętaj, że / blue nie istnieje, ponieważ jest generowany przez widoki. gdy użytkownik osiągnie ścieżkę / blue, powinien przeanalizować pierwszy argument i pobrać identyfikator NID tego aliasu, a następnie załadować jego zawartość. problem z filtrami kontekstowymi polega na tym, że nie ma możliwości podania wartości PHP, GDY WARTOŚĆ FILTRA JEST DOSTĘPNA.
Patoshi パ ト シ
@duckx, Istnieje doskonała opcja, aby podać wartość PHP, gdy filtr jest dostępny - VALIDATION (type: PHP Code). Dzięki tej opcji możesz użyć widoku obiektu i zrobić wszystko, czego potrzebujesz. W twoim przypadku /blueścieżka wygenerowana przez widoki byłaby również wykorzystana do pobrania identyfikatora węzła tego aliasu.
Jack-PL,