404页上没有导航链接


11

当我访问一个不存在的页面时,我希望仍然可以像在其他页面上一样看到主要链接和辅助链接,但是我得到的却是404页面中没有导航链接。另请参阅404页上没有导航链接

我已经找到了解决方案,但是如果有其他方法可以解决此问题(可能无需使用额外的模块),我感到很高兴。

Answers:


14

您可以通过在自定义模块中定义页面来实现。

使用创建类别“页面未找到”的页面hook_menu()

function MODULE_menu() {
  $items['page-not-found'] = array(
    'title' => '',
    'page callback' => 'MODULE_page_not_found',
    'access callback' => TRUE,
  );
  return $items;
}

function MODULE_page_not_found() {
  drupal_set_title('Page not found');
  $cust_err = "";
  $cust_err = $cust_err . "The requested page " . current_path() . " could not be found";
  return $cust_err;
}

页面回调用于current_path()返回导致404错误的页面路径。

转到管理>配置>系统>站点信息,然后在默认404(未找到)页面下输入未找到页面(名称与相同hook_menu

快照1

现在,错误页面如以下屏幕截图所示。

快照2

很明显,它包含所有导航链接,还包含产生错误的页面URL(非常类似于未找到的原始页面)。@ Nikhil在上面的答案中提到的模块将输出“找不到所请求的页面”。但不包含导致错误的页面的URL。


您确定我会在页面中找到导航链接吗?
niksmac

1
@NikhilM我已经测试过了,屏幕截图是真实的;-)
AjitS 2012年

我已经测试过了。我自定义页面未找到页面中显示的文本。但显然它显示了其他地方的默认文本!Drupal发生了什么?
shekoufeh 2015年

昨天我在工作中为此感到挣扎,这是一个非常好的解决方案。
Cyclonecode 2015年

11

有一个模块可以使这项工作404导航

在404 Not Found错误页面上,出于性能原因,Drupal将跳过网站所有导航链接的呈现*。其中一些包括:

“主链接”块和任何其他菜单链接块。主题的主要链接和辅助链接。*除非您已在admin / config / system / site-information上配置了“默认404(未找到)页面”。

在D7中也有一个补丁可以解决此问题。

在D8见THIS


6

也有不错的模块替代品:

  • 搜索404

    该模块不显示标准的“ 404页面未找到”,而是对URL中的关键字执行搜索,例如,如果用户访问http://example.com/does/not/exist,则该模块将进行搜索表示“不存在”,并显示搜索结果,而不是404页。这应有助于留住来自其他网站链接的旧URL或搜索索引的访问者。

  • 快404

    Drupal有昂贵的404错误。在具有“平均”模块负载的“平均”站点上,您可能正在查看服务器上消耗的60-100MB内存来交付404。请考虑一个页面,该页面的.gif链接错误并且缺少.css文件。该页面将与该页面的实际负载一起生成2 404。您最有可能需要180MB的内存来存储该页面,而不是应该占用的60MB。


3

您可以通过在自定义模块中定义页面来实现。

使用hook_menu()为类别“找不到页面”创建一个页面。

 function MODULE_menu() {
   $items['page-not-found'] = array(
     'title' => '',
     'page callback' => 'MODULE_page_not_found',
     'access callback' => TRUE,
   );
   return $items;
 }

 function MODULE_page_not_found() {
   drupal_set_title('Page not found');
   $cust_err = "";
   $cust_err = $cust_err . "The requested page " . current_path() . " ould not be found";
   return $cust_err;
 }

差不多了 但是此代码返回:

“找不到所请求的页面页面未找到”

需要将current_path()更改为request_uri()并返回:

“找不到请求的页面/ request_uri”


1
我将错误消息更改为t('The requested page "@path" could not be found.', array('@path' => request_uri()));。这样,当您的网站是多语言时,将使用默认的Drupal转换。
Jeroen

您是对的,这是一个好习惯=)
Andy Mark
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.