ไม่มีลิงก์การนำทางในหน้า 404


11

เมื่อฉันเข้าชมหน้าเว็บที่ไม่มีอยู่ฉันคาดหวังว่าจะเห็นลิงก์หลักและลิงค์รองเหมือนกับในหน้าอื่น ๆ แต่สิ่งที่ฉันได้รับคือไม่มีลิงก์การนำทางในหน้า 404 ดูยังไม่มีการเชื่อมโยงระบบนำทางบนหน้า 404

ฉันพบวิธีแก้ไขปัญหา แต่ฉันมีความสุขถ้ามีสิ่งอื่นที่สามารถแก้ไขปัญหานี้ได้

คำตอบ:


14

คุณสามารถทำได้โดยการกำหนดหน้าในโมดูลที่กำหนดเอง

สร้างหน้าหมวดหมู่ "ไม่พบหน้า" hook_menu()โดยใช้

function MODULE_menu() {
  $items['page-not-found'] = array(
    'title' => '',
    'page callback' => 'MODULE_page_not_found',
    'access callback' => TRUE,
  );
  return $items;
}

function MODULE_page_not_found() {
  drupal_set_title('Page not found');
  $cust_err = "";
  $cust_err = $cust_err . "The requested page " . current_path() . " could not be found";
  return $cust_err;
}

การเรียกกลับหน้าใช้current_path()เพื่อส่งคืนเส้นทางของหน้าเว็บที่ทำให้เกิดข้อผิดพลาด 404

ไปยังผู้ดูแลระบบ> Config> ระบบ> เว็บไซต์ข้อมูลและป้อนหน้าไม่พบ (ชื่อเดียวกับที่กำหนดไว้ในhook_menu) ภายใต้เริ่มต้น 404 (ไม่พบ) หน้า

snap1

ตอนนี้หน้าข้อผิดพลาดปรากฏขึ้นในหน้าจอต่อไปนี้

snap2

เป็นที่ชัดเจนว่ามีลิงก์การนำทางทั้งหมดและ URL ของหน้าเว็บที่สร้างข้อผิดพลาด (คล้ายกับหน้าต้นฉบับที่ไม่พบ) และโมดูลที่กล่าวถึงในคำตอบข้างต้นโดย @ Nikhilจะส่งออก "ไม่พบหน้าที่ร้องขอ" แต่ไม่มี URL ของหน้าเว็บที่ทำให้เกิดข้อผิดพลาด


คุณแน่ใจหรือว่าฉันจะได้รับลิงค์นำทางในหน้า?
niksmac

1
@NikhilM ฉันได้ทดสอบสิ่งนี้แล้วและภาพหน้าจอเป็นจริง ;-)
AjitS

ฉันทดสอบมันตอนนี้ ฉันปรับแต่งข้อความที่แสดงในหน้าไม่พบหน้า แต่เห็นได้ชัดว่ามันแสดงข้อความเริ่มต้นจากที่อื่น! เกิดอะไรขึ้นใน drupal?
shekoufeh

ฉันกำลังดิ้นรนกับที่ทำงานเมื่อวานนี้ทางออกที่ดีมาก
Cyclonecode

11

มีโมดูลที่จะทำให้404 Navigationทำงานได้

ในหน้าข้อผิดพลาด 404 Not Found Drupal จะข้ามการแสดงผลลิงก์การนำทางทั้งหมดของเว็บไซต์ของคุณด้วยเหตุผลด้านประสิทธิภาพ * บางส่วนของเหล่านี้รวมถึง:

บล็อก "ลิงค์หลัก" และบล็อกลิงค์เมนูอื่น ๆ ลิงก์หลักและลิงก์รองของธีมของคุณ * ยกเว้นว่าคุณได้กำหนดค่าหน้า "เริ่มต้น 404 (ไม่พบ)" ใน admin / config / system / site-information

นอกจากนี้ยังมีPatchสำหรับแก้ไขใน D7

ใน D8 ดูนี้นอกจากนี้


6

นอกจากนี้ยังมีทางเลือกโมดูลที่ดี:

  • ค้นหา 404

    แทนที่จะแสดงมาตรฐาน "ไม่พบหน้า 404" โมดูลนี้ทำการค้นหาคำหลักใน URL เช่นหากผู้ใช้ไปที่http://example.com/does/not/existโมดูลนี้จะทำการค้นหา สำหรับ "ไม่มีอยู่" และแสดงผลลัพธ์ของการค้นหาแทนหน้า 404 สิ่งนี้จะช่วยรักษาผู้เยี่ยมชมที่มาจาก URL เก่าที่เชื่อมโยงจากเว็บไซต์อื่นหรือจากดัชนีการค้นหา

  • รวดเร็ว 404

    Drupal มีข้อผิดพลาด 404 ข้อ บนไซต์ 'เฉลี่ย' ที่มีการโหลดโมดูลโดยเฉลี่ยคุณสามารถดูหน่วยความจำที่ใช้บนเซิร์ฟเวอร์ของคุณเพื่อส่งมอบ 404-100MB พิจารณาหน้าเว็บที่มีลิงค์. gif ที่ไม่ดีและไฟล์. css ที่ขาดหายไป หน้านั้นจะสร้าง 2 404 วินาทีพร้อมกับโหลดจริงของหน้า คุณมักจะดูที่หน่วยความจำ 180MB ไปยังเซิร์ฟเวอร์หน้านั้นแทนที่จะเป็น 60MB ที่ควรใช้


3

คุณสามารถทำได้โดยการกำหนดหน้าในโมดูลที่กำหนดเอง

สร้างหน้าสำหรับหมวดหมู่ "ไม่พบหน้าเว็บ" โดยใช้ hook_menu ()

 function MODULE_menu() {
   $items['page-not-found'] = array(
     'title' => '',
     'page callback' => 'MODULE_page_not_found',
     'access callback' => TRUE,
   );
   return $items;
 }

 function MODULE_page_not_found() {
   drupal_set_title('Page not found');
   $cust_err = "";
   $cust_err = $cust_err . "The requested page " . current_path() . " ould not be found";
   return $cust_err;
 }

มันเกือบจะดี แต่รหัสนี้จะส่งคืน:

"ไม่พบหน้าหน้าที่ร้องขอไม่พบ"

ต้องการเปลี่ยนcurrent_path ()เป็นrequest_uri ()และจะกลับมา:

"ไม่พบหน้า / request_uri ที่ขอ"


1
t('The requested page "@path" could not be found.', array('@path' => request_uri()));ผมเปลี่ยนข้อความข้อผิดพลาดไป วิธีนี้ใช้การแปล Drupal เริ่มต้นเมื่อไซต์ของคุณเป็นแบบหลายภาษา
Jeroen

คุณพูดถูกมันเป็นแนวปฏิบัติที่ดี =)
Andy Mark
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.