Пользовательский шаблон для 404 страниц с ошибками

12

Быстрый нубский вопрос здесь! Как настроить тему для использования пользовательского шаблона для 404 страниц ошибок вместо использования page.tpl?

Валид Баккари
источник

Ответы:

10

Следуй этим шагам:

  1. Создайте новую страницу с помощью модуля «Панели» (очистите страницу или вставьте в нее любой контент)

  2. В admin / config / system / site-information установите страницу по умолчанию 404 (не найдено) на новую страницу

  3. Переопределить файл шаблона для этой страницы (page - error.tpl.php)

  4. Удалите все регионы, которые вам не нужны, и вставьте свой код

Ahmed
источник
5
И даже не нужно использовать панели. Модуль, обрабатывающий страницу или простейший узел «Базовая страница», тоже подойдет.
Молот
2
Зачем вам нужен модуль для создания 404?
MrUpsidown
1
Проблема с использованием узла, такого как базовая страница, заключается в том, что он будет появляться в результатах поиска и других списках, связанных с контентом, что нежелательно.
Руби
27

Еще одно решение из этого обсуждения, которое работает без панелей или других пользовательских модулей.

В папке вашей темы найдите template.phpи напишите этот код. Замените YOURTHEMEна название вашей темы:

function YOURTHEME_preprocess_page(&$vars) {
  $header = drupal_get_http_header('status'); 
  if ($header == '404 Not Found') {     
    $vars['theme_hook_suggestions'][] = 'page__404';
  }
}

Всякий раз, когда 404 происходит, вы page--404.tpl.phpбудете использованы. Не забудьте поставить «-», а не «__» в имени вашего файла шаблона.

Daniels
источник
Не забудьте очистить кеш, если вы только что создали page--404.tpl.phpфайл.
Блейк Эриксон
Для 403 $ header == '403 Запрещено'.
Генри
это не похоже на работу в модуле, шаблон в папке модуля не перегружен. как сделать то же самое с функцией YOURMODULE_preprocess_page (& $ vars)?
Матеил
3

Если вы хотите иметь настроенную страницу 404, которая не требует создания страницы (узла), используйте модуль customerror .

Если у вас есть страница 404 в Drupal, она будет отображаться в результатах поиска и / или ваших списках просмотров.

При использовании модуля customerror вы можете переопределить шаблон, создав страницу - customerror.tpl.php в папке вашей темы. Не забудьте также очистить кеш после того, как вы создали новый файл шаблона.

alexkb
источник
Это выглядело хорошо, но для тех из вас, кто также использует модуль перенаправления, кажется, что они не очень хорошо играют вместе. Я никогда не мог заставить клиентов показать свою страницу поверх того, что показывал редирект.
evanmcd
1
Мы используем модули Redirect и Customerror в унисон без этих проблем. Просматривая страницы настроек обоих модулей, можно увидеть, что customerror (в дополнение к пользовательской функции ошибок) также имеет функцию управления перенаправлениями, хотя и с грубым интерфейсом. Если вы используете перенаправление (а OP - нет), просто избегайте использования настроек перенаправления userror, и у вас не должно возникнуть никаких проблем.
alexkb
0

Не предполагая каких-либо соглашений, которые могут существовать в вашей базе тем, вопрос, наконец, как я могу точно узнать, какой файл шаблона использовать ...

Вот шаги:

  1. Создайте базовую базу и называйте ее как хотите.
  2. Назначьте эту страницу для ответа 404 admin / config / system / site-information
  3. Включите режим theme_debug.
  4. Введите глупый URL в адресной строке.
  5. Вы попадаете на свою изначально созданную страницу
  6. Посмотрите на источник и предложение шаблонов, вы получите что-то вроде:введите описание изображения здесь

  7. Это просто, нет файла предварительной обработки или template.php для изменения.

Я сам выбрал тот, который отмечен топором, так как я хотел чего-то обнаженного с полной рамкой и просто ссылкой на спину.

jmary
источник
Обратите внимание, что базовая страница, созданная вами для ошибки 404, теперь также будет отображаться в результатах поиска как страница содержимого.
Роби