कैसे पता करें कि वर्तमान पृष्ठ मॉड्यूल / टेम्पलेट से 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.