Không có liên kết điều hướng trên các trang 404


11

Khi tôi truy cập một trang không tồn tại, tôi hy vọng vẫn thấy các liên kết chính và phụ như trên bất kỳ trang nào khác, nhưng những gì tôi nhận được là không có liên kết điều hướng trong trang 404. Xem thêm Không có liên kết điều hướng trên trang 404 .

Tôi đã tìm thấy một giải pháp, nhưng tôi rất vui nếu một cái gì đó khác có thể khắc phục điều này (có thể mà không cần sử dụng các mô-đun bổ sung).

Câu trả lời:


14

Bạn có thể làm điều đó bằng cách xác định một trang trong một mô-đun tùy chỉnh.

Tạo một trang cho danh mục "Không tìm thấy trang" bằng cách sử dụng 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;
}

Gọi lại trang sử dụng current_path()để trả về đường dẫn của trang gây ra lỗi 404.

Chuyển đến Quản trị viên> Cấu hình> Hệ thống> Thông tin trang web và nhập trang không tìm thấy (cùng tên như được xác định trong hook_menu) trong trang 404 (không tìm thấy) mặc định .

snap1

Bây giờ trang lỗi xuất hiện như trong ảnh chụp màn hình sau đây.

chụp nhanh

Rõ ràng là nó chứa tất cả các liên kết điều hướng và cả URL trang tạo ra lỗi (rất giống với trang gốc không tìm thấy). Và mô-đun được đề cập trong câu trả lời ở trên của @ Nikhil sẽ xuất ra "Không thể tìm thấy trang được yêu cầu." nhưng không chứa URL của trang gây ra lỗi.


Bạn có chắc chắn tôi sẽ nhận được các liên kết điều hướng trong trang?
niksmac

1
@NikhilM Tôi đã thử nghiệm điều này và các ảnh chụp màn hình là có thật ;-)
AjitS

Tôi đã kiểm tra nó ngay bây giờ. Tôi tùy chỉnh văn bản hiển thị trong trang không tìm thấy trang. nhưng rõ ràng nó hiển thị văn bản mặc định từ một nơi khác! chuyện gì đang xảy ra ở drupal?
shekoufeh

Tôi đã vật lộn với điều này ngày hôm qua tại nơi làm việc, giải pháp rất tốt đẹp.
Cyclonecode

11

Có một mô-đun để thực hiện công việc này 404 Điều hướng

Trên trang 404 Không tìm thấy lỗi, Drupal sẽ bỏ qua kết xuất tất cả các liên kết điều hướng của trang web của bạn vì lý do hiệu suất *. Một số trong số này bao gồm:

Khối "Liên kết chính" và bất kỳ khối liên kết menu nào khác. Các liên kết chính và liên kết phụ của chủ đề của bạn. * Trừ khi bạn đã định cấu hình trang "Mặc định 404 (không tìm thấy)" trên thông tin quản trị / cấu hình / hệ thống / trang web.

Ngoài ra còn có một Patch để sửa lỗi này trong D7.

Trong D8 Xem NÀY cũng NÀY


6

Ngoài ra còn có các lựa chọn thay thế mô-đun tốt:

  • Tìm kiếm 404

    Thay vì hiển thị "Không tìm thấy trang 404" tiêu chuẩn, mô-đun này thực hiện tìm kiếm các từ khóa trong URL, ví dụ: nếu người dùng truy cập http://example.com/does/not/exist , mô-đun này sẽ thực hiện tìm kiếm cho "không tồn tại" và hiển thị kết quả tìm kiếm thay vì trang 404. Điều này sẽ giúp giữ chân khách truy cập đến từ các URL cũ được liên kết từ các trang web khác hoặc từ các chỉ mục tìm kiếm.

  • 404 nhanh

    Drupal có lỗi 404 đắt tiền. Trên trang web 'trung bình' có tải mô-đun 'trung bình', bạn có thể xem 60-100 MB bộ nhớ đang được sử dụng trên máy chủ của mình để cung cấp 404. Hãy xem xét một trang có liên kết .gif xấu và tệp .css bị thiếu. Trang đó sẽ tạo ra 2 404 cùng với tải thực tế của trang. Bạn rất có thể đang xem 180 MB bộ nhớ cho máy chủ trang đó thay vì 60 MB cần có.


3

Bạn có thể làm điều đó bằng cách xác định một trang trong một mô-đun tùy chỉnh.

Tạo một trang cho danh mục "Không tìm thấy trang" bằng 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;
 }

Nó gần như là tốt. Nhưng mã này trả về:

"Không thể tìm thấy trang yêu cầu không tìm thấy trang"

cần thay đổi current_path () thành request_uri () và sẽ trả về:

"Không thể tìm thấy trang được yêu cầu / request_uri"


1
Tôi đã thay đổi thông báo lỗi thành t('The requested page "@path" could not be found.', array('@path' => request_uri()));. Bằng cách này, bản dịch Drupal mặc định được sử dụng khi trang web của bạn đa phương.
Jeroen

Bạn nói đúng, đó là cách thực hành tốt =)
Andy Mark
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.