На 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.

Перейдіть на сторінку Адміністратор> Налаштування> Система> Інформація про сайт та введіть сторінку не знайдено (те саме ім'я, як визначено в hook_menu) на сторінці за замовчуванням 404 (не знайдено) .

оснащення1

Тепер сторінка з помилками відображається як на наступному скріншоті.

оснащення2

Зрозуміло, що він містить усі посилання навігації, а також URL-адресу сторінки, яка створює помилку (дуже схожа на оригінальну сторінку, яку не знайдено). І модуль, згаданий у відповіді вище Нікхілом, виведе "Запрошену сторінку не вдалося знайти". але не містить URL сторінки, що викликає помилку.


Ви впевнені, що я отримаю навігаційні посилання на сторінці?
niksmac

1
@NikhilM Я тестував це, і скріншоти справжні ;-)
AjitS

Я зараз тестую це. Я налаштовую текст, показаний на сторінці не знайдено. але, мабуть, він показує текст за замовчуванням з іншого місця! що відбувається в друпалі?
shekoufeh

Я боровся з цим вчора на роботі, дуже приємне рішення.
Cyclonecode

11

Існує модуль для виконання цієї роботи 404 Навігація

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

Блок "Первинні посилання" та будь-який інший блок посилань на меню. Основні посилання та додаткові посилання вашої теми. * Якщо ви не налаштували "сторінку за замовчуванням 404 (не знайдено)" для адміністратора / config / системи / сайту-інформації.

Також є патч для виправлення цього в D7.

У D8 Див цей же ЦЕ


6

Також є хороші альтернативи модуля:

  • Пошук 404

    Замість показу стандартного "404 Сторінку не знайдено", цей модуль здійснює пошук за ключовими словами в URL-адресі, наприклад, якщо користувач переходить до http://example.com/does/not/exist , цей модуль здійснить пошук для "не існує" і показує результат пошуку замість сторінки 404. Це має допомогти зберегти відвідувачів зі старих URL-адрес, пов’язаних з інших сайтів, або з пошукових індексів.

  • Швидкий 404

    Drupal має дорогі 404 помилки. На "середньому" сайті із "середнім" завантаженням модуля, ви можете переглянути 60-100 МБ пам'яті, що витрачається на вашому сервері для доставки 404. Розгляньте сторінку з неправильним .gif посиланням та відсутнім файлом .css. Ця сторінка генерує 2 404 секунди разом із фактичним завантаженням сторінки. Ви, швидше за все, дивитесь на 180 МБ пам’яті на сервері, а не на 60 МБ, який вона повинна займати.


3

Ви можете це зробити, визначивши сторінку в спеціальному модулі.

Створіть сторінку для категорії "Сторінку не знайдено", використовуючи прив'язку_меню ().

 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()));. Таким чином використовується друкований переклад за замовчуванням, коли ваш сайт багатомовний.
Jeroen

Ви маєте рацію, це хороша практика =)
Енді Марк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.