Jak sprawdzić, w D7, czy bieżąca strona zwraca błąd 404 z modułu / szablonu?
Jak sprawdzić, w D7, czy bieżąca strona zwraca błąd 404 z modułu / szablonu?
Odpowiedzi:
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.
}
if ($status == '403 Forbidden') { /* ... do stuff ... */ }
system.404
trasie 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.
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
getStatusCode
funkcji.
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_item
nie będzie pusty, jeśli site_404
zmienna jest ustawiona na ścieżkę do węzła, więc potrzebne będą dodatkowe kontrole.