W jaki sposób moduł może wykryć, kiedy Drupal wysyła stronę „odmowy dostępu”?
Wiem, jak to zrobić za pomocą Drupala 6; Muszę wiedzieć, jak to zrobić w Drupal 7.
16
Możesz ustawić, które strony będą wyświetlane, gdy wystąpią błędy 403 i 404 (administrator / ustawienia / raportowanie błędów).
Myślę, że możesz dodać nową stronę do swojej hook_menu()
, a następnie ustawić tę stronę jako wywołanie zwrotne błędu 403. Po naciśnięciu niestandardowego menu zwrotnego menu wiesz, że wyświetlasz stronę „odmowa dostępu”!
Robię to w Boost 7.x. To nie jest ładne, ale wykonuje zadanie.
źródło
W Drupal 7 funkcją zwracającą już ustawione nagłówki HTTP jest drupal_get_http_header () , która wymaga nazwy nagłówka HTTP jako parametru. Patrząc na authorize_access_denied_page () i drupal_fast_404 () kod jasno jakie wartości przekazać do tej funkcji.
Gdy nagłówek „Status” zaczyna się od 403 , wtedy Drupal wyświetla stronę odmowy dostępu.
Upewnij się, że wezwanie do
drupal_get_http_header('Status')
nastąpi późno. Wywołanie podczashook_init()
jest zbyt wcześnie, ale wywołanie go podczashook_page_alter()
(lub dowolnego haka wstępnego przetwarzania motywu) będzie zawierało zaktualizowane informacje nagłówka.źródło
drupal_get_http_header('Status')
zwrotNULL
.Twój moduł może przechwycić wartość „
Default 403 (access denied) page
”, która jest modyfikowana przez stronę „Administer > Site configuration > Error reporting
”:W
hook_enable
, używającvariable_get
/variable_set
, skopiuj istniejącą wartość do zmiennej wtórnej i zastąp zmienną własną ścieżką (którą zarejestrowałeśhook_menu
).zmień formularz „Raportowanie błędów”, używając
hook_form_FORM_ID_alter
do odczytu z / do zmiennej wtórnejJeśli chcesz być całkowicie niewidoczny dla użytkownika, oddzwanianie do strony może zadzwonić
drupal_goto( the_value_of_the_secondary_variable )
.W
hook_disable
, przywrócić wartość ze zmiennej wtórnym.I to wszystko, twój moduł jest powiadamiany w czysty sposób (i niewidoczny dla użytkownika), gdy zostanie wywołane „Odmowa dostępu”.
źródło
Na pewno możesz użyć
get_headers()
funkcji PHP ?Pierwszym zwróconym elementem w tablicy będzie kod odpowiedzi. Jeśli zawiera „403”, Drupal zwrócił stronę „odmowy dostępu”.
Nie jestem pewien, gdzie byłoby to najlepsze miejsce do połączenia. Prawdopodobnie w
hook_exit()
zależności od potrzeb:źródło
Jest to najprostszy sposób na wykrycie odmowy dostępu (403) i nie znaleziono strony (404) w Drupal 7.
źródło
Możesz do tego użyć modułu Panele .
źródło