Нет навигационных ссылок на 404 страницах

11

Когда я посещаю несуществующую страницу, я ожидаю увидеть первичные и вторичные ссылки, как и на любой другой странице, но я получаю только навигационные ссылки на странице 404. Смотрите также Нет навигационных ссылок на 404 страницах .

Я нашел решение, но я рад, если что-то еще может это исправить (возможно, без использования дополнительных модулей).

niksmac
источник

Ответы:

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.

Перейти к Admin> Config> Система> Site-информация , и введите страницу, не обретенное ( такое же название , как определено в hook_menu) по умолчанию 404 (не найдено) страницы .

SNAP1

Теперь страница ошибки появляется, как на следующем скриншоте.

snap2

Понятно, что он содержит все навигационные ссылки, а также URL-адрес страницы, приводящий к ошибке (очень похоже на исходную страницу не найдена). И модуль, упомянутый выше в ответе @ Nikhil, выдаст «Запрошенная страница не найдена». но не содержит URL страницы, вызвавшей ошибку.

AjitS
источник
Вы уверены, что я получу навигационные ссылки на странице?
Никсмак
1
@NikhilM Я проверял это, и скриншоты реальны ;-)
AjitS 19.12.12
Я проверю это прямо сейчас. Я настраиваю текст показанный на странице не найденная страница. но, видимо, он показывает текст по умолчанию откуда-то еще! что происходит в друпале?
Shekoufeh
Я боролся с этим вчера на работе, очень хорошее решение.
Циклон-код
11

Есть модуль для этой работы 404 Навигация

На страницах с ошибками 404 Not Found, Drupal пропустит рендеринг всех навигационных ссылок вашего сайта по соображениям производительности *. Некоторые из них включают в себя:

Блок «Первичные ссылки» и любой другой блок ссылок меню. Первичные ссылки и Вторичные ссылки вашей темы. * Если вы не настроили «Страницу по умолчанию 404 (не найдено)» в admin / config / system / site-information.

Также есть патч, чтобы исправить это в D7.

В D8 См этот же ЭТО

niksmac
источник
6

Есть также хорошие альтернативы модуля:

  • Поиск 404

    Вместо того, чтобы показывать стандартную страницу 404 «Страница не найдена», этот модуль выполняет поиск по ключевым словам в URL-адресе, например, если пользователь переходит на http://example.com/does/not/exist , этот модуль выполняет поиск. для "не существует" и показывает результат поиска вместо страницы 404. Это должно помочь удержать посетителей, пришедших со старых URL-адресов, связанных с другими сайтами, или с поисковых индексов.

  • Фаст 404

    У Drupal есть дорогие 404 ошибки. На «среднем» сайте со «средней» загрузкой модуля вы можете посмотреть, как 60-100 МБ памяти используется вашим сервером для доставки 404. Рассмотрим страницу с плохой ссылкой .gif и отсутствующим файлом .css. Эта страница будет генерировать 2 404s вместе с фактической загрузкой страницы. Скорее всего, вы просматриваете эту страницу на 180 МБ памяти, а не на 60 МБ.

geekgirlweb
источник
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 используется, когда ваш сайт многоязычный.
Йерун
Вы правы, это хорошая практика =)
Энди Марк