Темизация страницы 404 в Drupal 8

Главные вкладки

Аватар пользователя IRONFELIX IRONFELIX 21 апреля 2017 в 17:00

Народ, а как называется темплейт в Drupal 8.3 для темизации страницы с 404 ошибкой (создана нодой и прописана в настройке сайта) ?
Варианты page--system-404.html.twig или page--404.html.twig не срабатывают (

Комментарии

Аватар пользователя IRONFELIX IRONFELIX 22 апреля 2017 в 17:26

Не, это не решение. Я пробовал. Это работает только при прямом запросе URL (например www.site.ru/node/100), но не работает, когда набирают случайный URL www.site.ru/blabla и друпал перенаправляет на сотую ноду.
Еще я читал такую тему, что в друпал 8.3 что-то изменили и темизация 4XX страниц не работает ( и там предлагают патч для ядра /core/modules/system/system.module Но только у меня и с ним не работает ((((
Или предлагают своим модулем поставить хук....

<?php
/**
 * 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;
}
?>

но только и он мне не помогает (

Аватар пользователя IRONFELIX IRONFELIX 27 апреля 2017 в 16:49

Решил данный вопрос установкой следующего хука в своей теме:

<?php
function mytheme_theme_suggestions_page_alter(array &$suggestions, array $variables) {
  
$http_error_suggestions = [
     
'system.401' => 'page__401',
     
'system.403' => 'page__403',
     
'system.404' => 'page__404',
  ];
  
$node = \Drupal::request()->attributes->get('node');
  if (
$node) {
     if (
$node->id() == 49 ) {  // Номер ноды, который привязан к 404 странице
        
$suggestions[] = $http_error_suggestions['system.404'];
     }
  }
}
?>

Решил в системные файлы не лезть, пусть пока так работает, а там и ядро подлатают.