404错误页面的自定义模板


Answers:


10

跟着这些步骤:

  1. 使用“面板”模块制作一个新页面(空页面或在其中放置任何内容)

  2. 在admin / config / system / site-information中将Default 404(未找到)页面设置为新页面

  3. 覆盖该页面的模板文件(page--error.tpl.php)

  4. 删除所有不需要的区域并放入代码


5
而且甚至不需要使用面板。处理页面或最简单的“基本页面”节点的模块也可以。
Mołot

2
为什么需要一个贡献模块来创建404?
MrUpsidown 2015年

1
使用节点(例如基本页面)的问题在于,它将随后出现在搜索结果和其他与内容相关的列表中,这是不希望的。
rooby

27

此讨论中的另一种解决方案无需面板或其他自定义模块即可使用。

在主题文件夹中找到template.php并编写此代码。替换YOURTHEME为主题名称:

function YOURTHEME_preprocess_page(&$vars) {
  $header = drupal_get_http_header('status'); 
  if ($header == '404 Not Found') {     
    $vars['theme_hook_suggestions'][] = 'page__404';
  }
}

每当404出现时,您page--404.tpl.php都会被使用。请记住在模板文件名中输入“-”而不是“ __”。


如果刚创建page--404.tpl.php文件,请记住要清除缓存。
布莱克·埃里克森

对于403,$ header =='403 Forbidden'。
亨利

这似乎在模块中不起作用,未超过模块文件夹中的模板。如何使用函数YOURMODULE_preprocess_page(&$ vars)做同样的事情?
马托伊尔(Motoeil),

3

如果要创建一个不涉及创建页面(节点)的自定义404页面,请使用customerror模块。

如果您在Drupal中有404页,那么它将显示在搜索结果和/或“视图”列表中。

使用customerror模块时,可以通过在主题文件夹中创建页面--customerror.tpl.php来覆盖模板。创建新模板文件后,还请记住要刷新缓存。


看起来不错,但是对于那些也使用重定向模块的人来说,他们似乎在一起玩得不好。我永远不会收到customerror来显示重定向显示的页面。
evanmcd

1
我们统一使用重定向和Customerror模块,而不会出现这些问题。查看两个模块的设置页面,看起来customerror(除了其自定义错误功能)还具有管理重定向的功能,尽管具有粗略的接口。如果您使用的是重定向(而不是OP),则只需避免使用customerror重定向设置,就不会有任何问题。
alexkb

0

在不假设主题库中可能存在任何约定的情况下,最后的问题是我如何才能确定要使用哪个模板文件...

步骤如下:

  1. 创建一个基本库并根据需要调用它。
  2. 将该页面分配给404响应admin / config / system / site-information
  3. 启用theme_debug模式。
  4. 在地址栏中输入一个愚蠢的网址。
  5. 您到达最初创建的页面
  6. 查看源代码和模板建议,您将获得类似:在此处输入图片说明

  7. 这很简单,无需修改任何预处理文件或template.php。

我本人选择了以斧头标记的那个,因为我想要裸露的东西,带有完整的框架图片和指向后面的链接。


请注意,您为404错误创建的基本页面现在也将作为内容页面显示在搜索结果中。
rooby
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.