Brak linków nawigacyjnych na 404 stronach


11

Kiedy odwiedzam stronę, która nie istnieje, spodziewam się, że nadal będę widzieć podstawowe i dodatkowe linki, jak na każdej innej stronie, ale otrzymuję brak linków nawigacyjnych na stronie 404. Zobacz także Brak linków nawigacyjnych na stronach 404 .

Znalazłem rozwiązanie, ale cieszę się, że coś innego może to naprawić (być może bez użycia dodatkowych modułów).

Odpowiedzi:


14

Możesz to zrobić, definiując stronę w niestandardowym module.

Utwórz stronę dla kategorii „Nie znaleziono strony” za pomocą 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;
}

Funkcja zwrotna strony używa current_path()do zwrócenia ścieżki strony powodującej błąd 404.

Idź do Admin> Config> System> Site-informacji , a następnie wprowadź stronę-not-found (ta sama nazwa, jak określono w hook_menu) pod Domyślne 404 (nie znaleziono) strona .

Snap1

Teraz strona błędu pojawia się jak na poniższym zrzucie ekranu.

Snap2

Oczywiste jest, że zawiera wszystkie łącza nawigacyjne, a także adres URL strony powodujący błąd (bardzo podobny do oryginalnej strony nie znaleziono). Moduł wymieniony w powyższej odpowiedzi przez @ Nikhil wyświetli komunikat „Nie można znaleźć żądanej strony”. ale nie zawiera adresu URL strony powodującej błąd.


Czy na pewno otrzymam linki nawigacyjne na stronie?
— niksmac,

1
@NikhilM Przetestowałem to, a zrzuty ekranu są prawdziwe ;-)
— AjitS,

Właśnie to przetestowałem. Dostosowuję tekst wyświetlany na stronie nie znaleziono strony. ale najwyraźniej pokazuje domyślny tekst z innego miejsca! co się dzieje w Drupal?
— shekoufeh

Walczyłem z tym wczoraj w pracy, bardzo fajne rozwiązanie.
— Kod cyklonowy

11

Jest moduł, aby to działało 404 Nawigacja

Na stronach błędów 404 Nie znaleziono Drupal pominie renderowanie wszystkich linków nawigacyjnych Twojej witryny ze względu na wydajność *. Niektóre z nich obejmują:

Blok „Główne łącza” i każdy inny blok łączy menu. Główne linki i drugorzędne linki twojego motywu. * Chyba że skonfigurowałeś „Domyślną stronę 404 (nie znaleziono)” w admin / config / system / site-information.

Jest także łatka do naprawy tego w D7.

W D8 Zobacz TO TEŻ TE


6

Istnieją również dobre alternatywne moduły:

  • Szukaj 404

    Zamiast wyświetlać standardowe „Nie znaleziono strony 404”, moduł ten wyszukuje słowa kluczowe w adresie URL, np. Jeśli użytkownik wejdzie na http://example.com/does/not/exist , ten moduł przeprowadzi wyszukiwanie dla „nie istnieje” i pokazuje wynik wyszukiwania zamiast strony 404. Powinno to pomóc zatrzymać odwiedzających przychodzących ze starych adresów URL połączonych z innymi witrynami lub z indeksów wyszukiwania.

  • Szybko 404

    Drupal ma kosztowne błędy 404. W „przeciętnej” witrynie z „przeciętnym” obciążeniem modułu możesz patrzeć na 60-100 MB pamięci zużywanej na serwerze w celu dostarczenia 404. Rozważ stronę ze złym linkiem .gif i brakującym plikiem .css. Ta strona wygeneruje 2 404 wraz z rzeczywistym ładowaniem strony. Najprawdopodobniej patrzysz na 180 MB pamięci na serwer tej strony, a nie na 60 MB, które powinna ona zająć.


3

Możesz to zrobić, definiując stronę w niestandardowym module.

Utwórz stronę dla kategorii „Nie znaleziono strony” za pomocą 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;
 }

Jest prawie dobrze. Ale ten kod zwraca:

„Nie można znaleźć żądanej strony nie znaleziono strony”

potrzebuję zmienić current_path () na request_uri () i zwróci:

„Nie można znaleźć żądanej strony / request_uri”


1
Zmieniłem komunikat błędu na t('The requested page "@path" could not be found.', array('@path' => request_uri()));. W ten sposób używane jest domyślne tłumaczenie Drupal, gdy witryna jest wielojęzyczna.
— Jeroen

Masz rację, to dobra praktyka =)
— Andy Mark,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.