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

niksmac
źródło

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.

AjitS
źródło
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

niksmac
źródło
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ąć.

geekgirlweb
źródło
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”

Andy Mark
źródło
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,