Вопрос:

Пользовательский файл шаблона 404 в Drupal 8

drupal-theming drupal-8

9549 просмотра

3 ответа

38 Репутация автора

Как я могу создать кастом 404 pageв Drupal 8?

Я создал новую страницу (Контент) в бэк-офисе под названием 404(номер узла 100). Я установил его как страницу 404 по умолчанию в Configuration> Basic siteнастройках.

настройки

Он работает с контентом, который я установил в Backoffice.

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

Я пытался создать, mytheme/templates/html--node--100.html.twigи он работает только тогда, когда запрос его непосредственно, что url ( node/100), но он не работает, когда вы пытаетесь случайный слаг в URL, и drupal должен разрешить его. Когда это происходит, drupal передает мне содержимое, которое 404 pageесть в бэк-офисе, а не в файле, который я только что создал.

Пока я пытался несколько файлов , таких как page--404-html.twig, html--node--404.html.twig, html--page--404.html.twig, ... но она не работает ни

Кто-нибудь может мне помочь?

Автор: cadev Источник Размещён: 25.08.2016 07:49

Ответы (3)


2 плюса

49 Репутация автора

Попробуйте страницу - система - 404.html.twig

Автор: n8tron Размещён: 01.09.2016 04:26

12 плюса

144 Репутация автора

Решение

page - system - 404.html.twig (или эквивалент для других статусов 4xx) больше не работает в Drupal 8.3, так как обработка ответов 4xx изменилась. Теперь вам понадобится основной патч с https://www.drupal.org/node/2363987 или аналогичный пользовательский хук модуля, который добавляет шаблоны для этих страниц:

/**
 * Implements hook_theme_suggestions_page() to set 40x template suggestions
 */
function MYMODULE_theme_suggestions_page(array $variables) {
  $path_args = explode('/', trim(\Drupal::service('path.current')->getPath(), '/'));
  $suggestions = theme_get_suggestions($path_args, 'page');
  $http_error_suggestions = [
    'system.401' => 'page__401',
    'system.403' => 'page__403',
    'system.404' => 'page__404',
  ];
  $route_name = \Drupal::routeMatch()->getRouteName();
  if (isset($http_error_suggestions[$route_name])) {
    $suggestions[] = $http_error_suggestions[$route_name];
  }

  return $suggestions;
}

РЕДАКТИРОВАТЬ: вероятно, лучше использовать hook_theme_suggestions_page_alterдля изменения массива предложений. Смотрите обновленную версию этого кода в https://www.drupal.org/project/fourxx_templates (или https://github.com/ahebrank/fourxx_templates/blob/8.x-1.x/fourxx_templates.module )

Автор: ahebrank Размещён: 15.04.2017 02:40

5 плюса

851 Репутация автора

Следующая реализация добавляет шаблон шаблона для страницы, в этом случае, если вы создадите файл page - 404.html.twig в своей теме, вы сможете настроить страницу и работать с Drupal 8.5.1.

MYTHEME.theme

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function MYTHEME_theme_suggestions_page_alter(&$suggestions, $variables, $hook) {
  /**
   * 404 template suggestion.
   */
  if (!is_null(Drupal::requestStack()->getCurrentRequest()->attributes->get('exception'))) {
    $status_code = Drupal::requestStack()->getCurrentRequest()->attributes->get('exception')->getStatusCode();
    switch ($status_code) {
      case 404: {
        $suggestions[] = 'page__' . (string) $status_code;
        break;
      }
      default:
        break;
    }
  }
}

и создайте шаблон с именем page - 404.html.twig и переопределите его.

ИЛИ ,
если вы хотите добавить предложения для всех страниц с ошибками, просто выньте оператор switch.

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function MYTHEME_theme_suggestions_page_alter(&$suggestions, $variables) {
  /**
   * error page template suggestions.
   */
  if (!is_null(Drupal::requestStack()->getCurrentRequest()->attributes->get('exception'))) {
    $status_code = Drupal::requestStack()->getCurrentRequest()->attributes->get('exception')->getStatusCode();
    $suggestions[] = 'page__' . (string) $status_code;
  }
}
Автор: Israel Morales Размещён: 30.03.2018 06:26
32x32