如何在Drupal 8中创建自定义404 page
?
我在后台创建了一个名为404
的新页面(内容)(节点号100)。
我已将其设置为Configuration
>处的404默认页面
Basic site
设置。
它适用于我在Backoffice中设置的内容。
但现在我希望它以编程方式编辑,我不知道如何创建覆盖文件。
我尝试创建mytheme/templates/html--node--100.html.twig
并且仅在请求直接指向该网址(node/100
)时才有效,但是当您尝试在网址上随机阻止时它不起作用drupal必须解决它。发生这种情况时,drupal正在为我提供404 page
在后台而不是我刚刚创建的文件中的内容。
我尝试了多个文件,例如page--404-html.twig
,html--node--404.html.twig
,html--page--404.html.twig
,......但它既不起作用
有人可以帮我一把吗?
答案 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