कैसे पता करें कि वर्तमान पृष्ठ मॉड्यूल / टेम्पलेट से 404 त्रुटि है?


20

D7 में कैसे चेक करें, यदि वर्तमान पृष्ठ मॉड्यूल / टेम्पलेट से 404 त्रुटि दे रहा है?


1
: Drupal 6 के लिए संबंधित प्रश्न drupal.stackexchange.com/questions/10259/...
mpdonadio

जवाबों:


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.
}

यह कोड क्या कार्य करता है?
जॉर्डन मैग्नसन

1
आप इस कोड को template_preprocess_page (& $ चर) के अंदर रख सकते हैं
fzmaster

इसे हुक_एक्सिट ()
शेल्डोन्क्रेगर

यदि आप 403 को हैंडल करना चाहते हैं, तो आप उपयोग कर सकते हैं:if ($status == '403 Forbidden') { /* ... do stuff ... */ }
tyler.frankenstein

2
नोट: system.404मार्ग पर आधारित Drupal 8 के लिए समाधान काम नहीं करता है यदि आपने कॉन्फ़िगरेशन में 404 पेज के रूप में नोड पेज निर्दिष्ट किया है > सिस्टम> मूल साइट सेटिंग्स । समाधान के लिए @Gervase 'उत्तर देखें, जो तब काम करता है जब आपके पास कोई कस्टम 404 पृष्ठ हो या न हो।
जेम्सविलसन

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
जेम्सविलसन

1
हालांकि सावधान - वहाँ वस्तु वापस ले लिया एक getStatusCodeसमारोह नहीं हो सकता है ।
fritzmg

यह मेरी अंतहीन खोज और कोशिश को समाप्त करता है।
usmanjutt84

4

Drupal 7 में Access Denied (403) और Page Not Found (404) का पता लगाने का यह सबसे सरल तरीका है।

// 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.