Drupal 8中的自定义404模板文件

时间:2016-08-25 07:49:30

标签: drupal-theming drupal-8

如何在Drupal 8中创建自定义404 page

我在后台创建了一个名为404的新页面(内容)(节点号100)。 我已将其设置为Configuration>处的404默认页面 Basic site设置。

Settings

它适用于我在Backoffice中设置的内容。

但现在我希望它以编程方式编辑,我不知道如何创建覆盖文件。

我尝试创建mytheme/templates/html--node--100.html.twig并且仅在请求直接指向该网址(node/100)时才有效,但是当您尝试在网址上随机阻止时它不起作用drupal必须解决它。发生这种情况时,drupal正在为我提供404 page在后​​台而不是我刚刚创建的文件中的内容。

我尝试了多个文件,例如page--404-html.twightml--node--404.html.twightml--page--404.html.twig,......但它既不起作用

有人可以帮我一把吗?

4 个答案:

答案 0 :(得分:12)

页面 - 系统 - 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

中查看此代码的更新版本

答案 1 :(得分:5)

以下实现为页面添加了模板建议,在这种情况下,如果您在主题中创建页面 - 404.html.twig文件,您将能够自定义页面并使用Drupal 8.5.1 < / p>

MYTHEME.theme

public Guid Invoice { get; set; }

并创建一个名为page的模板 - 404.html.twig并覆盖您的内容

答案 2 :(得分:2)

尝试页面 - 系统 - 404.html.twig

答案 3 :(得分:0)

您现在可以使用page--404.html.twig。只要确保您没有将节点设置为404页面即可。来源:https://www.drupal.org/node/2960810