Jak ustawić widoki, aby zwracały wartość 404 za pomocą Global: Null w filtrach kontekstowych?

14

Standardowe zachowanie Drupala polega na przekazywaniu wszystkich argumentów, niezależnie od tego, czy zażądały. Czasami takie zachowanie jest pożądane. Jednak muszę zwrócić wartość 404 dla wszystkiego oprócz ciągu zapytania.

Przykład problemu http://drupal.org/project/modules http://drupal.org/project/modules/google.com <- To powinno zwrócić 404; 200 dane. Kara za powielanie treści!

Moduł views 404 zakłada, że ​​domyślnie nie chcesz, aby argumenty były przekazywane. Jednak nie ma wersji D7 modułu.

Ale strona projektu mówi, że 404s dla widoków można również osiągnąć poprzez ustawienie Global: Null w Arguments.

Oczywiście w D7 „argumentami” są teraz „filtry kontekstowe”, ale nie jestem pewien, jakie ustawienia dodać do filtra kontekstowego Global: null, aby uzyskać pożądany rezultat.

Każda pomoc będzie mile widziana.

Nigel Waters
źródło

Odpowiedzi:

22

W filtrach kontekstowych wybierz Dodaj ; w wyświetlonym oknie dialogowym wybierz Globalny: Null .

zrzut ekranu

Kliknij Dodaj i skonfiguruj filtry kontekstowe .

W oknie dialogowym, które pojawia się obok, w zestawu konkretną Gdy wartość filtra jest dostępna lub domyślny jest sprawdzić Określ kryteria poprawności wybierz - walidację Basic - dla Validator i wybierz Show „Nie znaleziono strony” za działania podjąć, jeśli wartość filtru nie jest sprawdzana . W zestawie pól Więcej zaznacz opcję Niepowodzenie sprawdzania poprawności podstawowej, jeśli podano dowolny argument .

zrzut ekranu

Przetestowałem to w utworzonym widoku „Artykuły” i działa.

zrzut ekranu

zrzut ekranu

Argument „Global: Null” musi być ostatni. Jeśli potrzebujesz na przykład identyfikatora użytkownika, najpierw dodaj go jako argument, a następnie dodaj argument „Global: Null”.

Zmieniłem widok „Artykuł”, aby zaakceptować identyfikator użytkownika jako argument, który służy do filtrowania listy węzłów artykułów. Widok nadal działa, ponieważ nie akceptuje dodatkowego argumentu.

zrzut ekranu

zrzut ekranu

kiamlaluno
źródło
1
Zwróci to błąd kodu 403, a nie 404. Zamiast tego wybierz opcję „Pokaż” Nie znaleziono strony ”
Eugene Fidelin,
W wątku na DO widzę kogoś sugerującego użycie arg (1) == NULL; w php sprawdź kod. Czy to jest lepsze czy prawie to samo?
Nigel Waters
1
@EugeneFidelin Edytowałem ekran „główny” i nie widziałem opcji Pokaż „Nie znaleziono strony” jako opcji. Poprawiłem swoją odpowiedź.
kiamlaluno
@NigelWaters Zapomnij o mojej poprzedniej odpowiedzi. :)Edytowałem niewłaściwy ekran, a widok nie działał tak, jak powinien. Nie ma potrzeby używania kodu PHP do sprawdzania poprawności argumentu; zobacz zaktualizowaną odpowiedź.
kiamlaluno
Nie mam jeszcze wystarczającej liczby punktów do skomentowania - opublikuję tutaj, aby podziękować @kiamlaluno. Działa świetnie i coś, o co waliłem przez chwilę.
Blue Waters
1

Możesz to zrobić za pomocą widoków po wyjęciu z pudełka. W każdym ustawieniu filtru kontekstowego widać pole wyboru „Określ kryteria sprawdzania poprawności”, zaznacz to, aby wyświetlić więcej ustawień.

Następnie możesz wybrać „weryfikator” w oparciu o warunki wyświetlania. Jeśli chcesz niestandardowo sprawdzić poprawność, wybierz kod php. Zwróć wartość True lub False w kodzie php na podstawie warunków sprawdzania poprawności.

Na koniec wybierz „Akcja do podjęcia”, ponieważ odmowa dostępu do ekranu! Zobacz poniższy zrzut ekranu dla kontekstowego filtra nid.

wprowadź opis zdjęcia tutaj

Anil Sagar
źródło
Co to jest kod php, który dodaję?
Nigel Waters
Używam tylko filtru kontekstowego Global: null
Nigel Waters
3
NIGDY NIE UŻYWAJ KODU PHP W WIDOKACH ANI INNYCH NARZĘDZIACH UI !!!
hugronaphor