Geçerli sayfanın bir modül / şablondan 404 hatası olup olmadığını nasıl kontrol edebilirim?


Yanıtlar:


33

Drupal 7'de kullanabilirsiniz drupal_get_http_header().

Template.php dosyasında bu kodu kullanın.

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

Drupal 8'de bir kancada aşağıdaki kodu kullanabilirsiniz.

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

Bu kod template.php içinde hangi işleve girer?
Jordan Magnuson

1
Bu kodu template_preprocess_page (& $ değişkenleri) içine yerleştirebilirsiniz
fzmaster

Bu ayrıca hook_exit ()
sheldonkreger

Bir if ($status == '403 Forbidden') { /* ... do stuff ... */ }
403'ü

2
Not: Yapılandırma> Sistem> Temel site ayarlarındasystem.404 404 sayfanız olarak bir düğüm sayfası belirttiyseniz , rotaya dayalı Drupal 8'in çözümü çalışmaz . Özel bir 404 sayfası belirttiğinizde veya belirtmediğinizde çalışan bir çözüm için @Gervase yanıtına bakın.
JamesWilson

11

Drupal 8.2.x:

Ne yazık ki, drupal_get_http_header ("status") artık çalışmıyor.

Deneyin:

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

}

Burada bir tartışma var: https://www.drupal.org/node/1969270


1
Bu ben aradığımı sadece! <3
JamesWilson

1
Yine de dikkatli olun - orada geri çekilen nesnenin bir getStatusCodeişlevi olmayabilir .
17'de fritzmg

Sonsuz arayışımı ve denememi bitiriyor.
usmanjutt84

4

Bu, Drupal 7'deki Erişim Reddedildi (403) ve Sayfa Bulunamadı (404) tespit etmenin en basit yoludur.

// 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_itemsite_404değişken bir düğüm yoluna ayarlanırsa boş olmaz , bu nedenle ek kontroller gerekir.
gapple

menu_get_item, sayfa başına biraz pahalı arama yok mu?
Kevin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.