Drupal 8 中的自定义 404 模板文件
Custom 404 template file in Drupal 8
如何在 Drupal 8 中创建自定义 404 page
?
我在后台创建了一个名为 404
的新页面(内容)(节点号 100)。
我已将其设置为 Configuration
> 的 404 默认页面
Basic site
设置。
它适用于我在后台设置的内容。
但现在我希望它可以通过编程方式进行编辑,但我不知道如何创建覆盖文件。
我尝试创建 mytheme/templates/html--node--100.html.twig
,它仅在直接请求 url (node/100
) 时有效,但当您尝试随机 slug 时它不起作用在 URL 上,drupal 必须解决它。发生这种情况时,drupal 正在为我提供 404 page
在后台而不是我刚刚创建的文件中的内容。
我已经尝试了几个文件,例如 page--404-html.twig
、html--node--404.html.twig
、html--page--404.html.twig
、...但它们都不起作用
谁能帮我一把?
尝试页面--系统--404.html.twig
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 (or https://github.com/ahebrank/fourxx_templates/blob/8.x-1.x/fourxx_templates.module)
中查看此代码的更新版本
以下实现为页面添加了模板建议,在这种情况下,如果您在主题中创建一个页面--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;
}
}
您现在可以使用 page--404.html.twig
。请确保您没有将节点设置为 404 页面。资料来源:https://www.drupal.org/node/2960810
如何在 Drupal 8 中创建自定义 404 page
?
我在后台创建了一个名为 404
的新页面(内容)(节点号 100)。
我已将其设置为 Configuration
> 的 404 默认页面
Basic site
设置。
它适用于我在后台设置的内容。
但现在我希望它可以通过编程方式进行编辑,但我不知道如何创建覆盖文件。
我尝试创建 mytheme/templates/html--node--100.html.twig
,它仅在直接请求 url (node/100
) 时有效,但当您尝试随机 slug 时它不起作用在 URL 上,drupal 必须解决它。发生这种情况时,drupal 正在为我提供 404 page
在后台而不是我刚刚创建的文件中的内容。
我已经尝试了几个文件,例如 page--404-html.twig
、html--node--404.html.twig
、html--page--404.html.twig
、...但它们都不起作用
谁能帮我一把?
尝试页面--系统--404.html.twig
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 (or https://github.com/ahebrank/fourxx_templates/blob/8.x-1.x/fourxx_templates.module)
以下实现为页面添加了模板建议,在这种情况下,如果您在主题中创建一个页面--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;
}
}
您现在可以使用 page--404.html.twig
。请确保您没有将节点设置为 404 页面。资料来源:https://www.drupal.org/node/2960810