Jak sprawdzić, czy bieżąca strona zawiera błąd 404 z modułu / szablonu?


Odpowiedzi:


33

W Drupal 7 możesz używać drupal_get_http_header().

W pliku template.php użyj tego kodu.

$status = drupal_get_http_header("status");
if ($status === '404 Not Found'){
  // Do something.
}

W Drupal 8 możesz użyć następującego kodu w haku.

$route_name = \Drupal::request()->attributes->get('_route');
if ('system.404' === $route_name) {
  // Do something.
}

Jaką funkcję ma ten kod w pliku template.php?
Jordan Magnuson,

1
Możesz umieścić ten template_preprocess_page kod wewnętrzny (& $ zmienne)
fzmaster

Można to również zaimplementować w hook_exit ()
sheldonkreger

Jeśli chcesz obsłużyć 403, możesz użyć:if ($status == '403 Forbidden') { /* ... do stuff ... */ }
tyler.frankenstein

2
Uwaga: rozwiązanie dla Drupala 8 oparte na system.404trasie nie działa, jeśli jako stronę 404 określono stronę węzła w Konfiguracja> System> Podstawowe ustawienia witryny . Zobacz odpowiedź @Gervase ', aby znaleźć rozwiązanie, które działa, gdy masz lub nie masz zdefiniowanej niestandardowej strony 404.
JamesWilson,

11

Drupal 8.2.x:

Niestety, drupal_get_http_header („status”) już nie działa.

Próbować:

$status = \Drupal::requestStack()->getCurrentRequest()->attributes->get('exception');
if ($status && $status->getStatusCode() == 404){

}

Dyskusja na ten temat tutaj: https://www.drupal.org/node/1969270


1
To jest właśnie to, czego szukasz! <3
JamesWilson,

1
Ostrożnie - zrestartowany tam obiekt może nie mieć żadnej getStatusCodefunkcji.
fritzmg

To kończy moje niekończące się poszukiwania i próby.
usmanjutt84

4

Jest to najprostszy sposób na wykrycie odmowy dostępu (403) i nie znaleziono strony (404) w Drupal 7.

// get the menu router item for the current page
$router_item = menu_get_item();

// if there is no router item, this page is not found
$is_page_not_found_404 = empty($router_item);

// if 'access' is empty for the router item, access is denied
$is_access_denied_403 = empty($router_item['access']);

$router_itemnie będzie pusty, jeśli site_404zmienna jest ustawiona na ścieżkę do węzła, więc potrzebne będą dodatkowe kontrole.
luka

menu_get_item, nieco droższe połączenie na stronę nie?
Kevin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.