Come verificare, in D7, se la pagina corrente sta restituendo un errore 404 da un modulo / modello?
Come verificare, in D7, se la pagina corrente sta restituendo un errore 404 da un modulo / modello?
Risposte:
In Drupal 7, puoi usare drupal_get_http_header()
.
Nel file template.php, usa questo codice.
$status = drupal_get_http_header("status");
if ($status === '404 Not Found'){
// Do something.
}
In Drupal 8, puoi usare il seguente codice in un hook.
$route_name = \Drupal::request()->attributes->get('_route');
if ('system.404' === $route_name) {
// Do something.
}
if ($status == '403 Forbidden') { /* ... do stuff ... */ }
system.404
percorso non funziona se è stata specificata una pagina nodo come pagina 404 in Configurazione> Sistema> Impostazioni sito di base . Vedi la risposta di @Gervase per una soluzione che funziona quando hai o non hai specificato una pagina 404 personalizzata.
Drupal 8.2.x:
Sfortunatamente, drupal_get_http_header ("status") non funziona più.
Provare:
$status = \Drupal::requestStack()->getCurrentRequest()->attributes->get('exception');
if ($status && $status->getStatusCode() == 404){
}
C'è una discussione qui: https://www.drupal.org/node/1969270
getStatusCode
funzione.
Questo è il modo più semplice per rilevare Accesso negato (403) e Pagina non trovata (404) in 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
non sarà vuoto se la site_404
variabile è impostata su un percorso del nodo, quindi sarebbero necessari ulteriori controlli.