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