Як перевірити, чи є поточна сторінка помилкою 404 від модуля / шаблону?


Відповіді:


33

У Drupal 7 можна використовувати drupal_get_http_header().

У файлі template.php використовуйте цей код.

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

У Drupal 8 ви можете використовувати наступний код у гачку.

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

Яку функцію виконує цей код всередині template.php?
Йордан Магнусон

1
Ви можете розмістити цей код всередині template_preprocess_page (& $ змінних)
fzmaster

Це також можна реалізувати в mock_exit ()
sheldonkreger

Якщо ви хочете обробити 403, ви можете використовувати:if ($status == '403 Forbidden') { /* ... do stuff ... */ }
tyler.frankenstein

2
Примітка: рішення для Drupal 8 на основі system.404маршруту не працює, якщо ви вказали сторінку вузла як свою сторінку 404 у розділі Конфігурація> Система> Основні налаштування сайту . Дивіться відповідь @Gervase для рішення, яке працює, якщо у вас є або не вказана спеціальна сторінка 404.
JamesWilson

11

Drupal 8.2.x:

На жаль, drupal_get_http_header ("статус") більше не працює.

Спробуйте:

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

}

Про це йдеться тут: https://www.drupal.org/node/1969270


1
Це саме те, що я шукав! <3
JamesWilson

1
Але обережно - повернутий туди об’єкт може не мати getStatusCodeфункції.
fritzmg

Це закінчує мої нескінченні пошуки та спроби.
usmanjutt84

4

Це найпростіший спосіб виявити заборонений доступ (403) та сторінку не знайдено (404) у 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не буде порожнім, якщо для site_404змінної встановлено шлях до вузла, тому потрібні додаткові перевірки.
розрив

menu_get_item, трохи дорогий дзвінок на сторінку ні?
Кевін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.