Nenhum link de navegação nas páginas 404

11

Quando visito uma página que não existe, espero ainda ver os links primário e secundário como em qualquer outra página, mas o que recebo é que não há links de navegação na página 404. Consulte também Nenhum link de navegação em 404 páginas .

Eu encontrei uma solução, mas estou feliz se algo mais puder corrigir isso (possivelmente sem o uso de módulos extras).

niksmac
fonte

Respostas:

14

Você pode fazer isso definindo uma página em um módulo personalizado.

Crie uma página para a categoria "Página não encontrada" usando 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;
}

O retorno de chamada da página usa current_path()para retornar o caminho da página que está causando o erro 404.

Vá para Admin> Configuração> Sistema> Informações do site e insira a página não encontrada (mesmo nome conforme definido em hook_menu) na página Padrão 404 (não encontrada) .

snap1

Agora, a página de erro aparece como na captura de tela a seguir.

snap2

É claro que ele contém todos os links de navegação e também o URL da página que produz o erro (muito semelhante à página original não encontrada). E o módulo mencionado na resposta acima por @ Nikhil exibirá "A página solicitada não foi encontrada." mas não contém o URL da página que está causando o erro.

AjitS
fonte
Tem certeza de que vou receber os links de navegação na página?
Niksmac
1
@NikhilM Eu testei isso e as capturas de tela são reais ;-) #
AjitS
Eu testei agora. Eu personalizo o texto mostrado na página não encontrada. mas aparentemente mostra o texto padrão de outro lugar! o que está acontecendo no drupal?
precisa saber é o seguinte
Eu estava lutando com isso ontem no trabalho, solução muito boa.
Cyclonecode
11

Existe um módulo para fazer este trabalho 404 Navigation

Nas páginas de erro 404 Não encontrado, o Drupal ignora a renderização de todos os links de navegação do seu site por razões de desempenho *. Alguns destes incluem:

O bloco "Links principais" e qualquer outro link de menu são bloqueados. Os links Primários e Secundários do seu tema. * A menos que você tenha configurado uma "página 404 padrão (não encontrada)" em admin / config / system / site-information.

Também há um patch para corrigir isso no D7.

Em D8, veja ISTO também ESTE

niksmac
fonte
6

Também existem boas alternativas de módulos:

  • Pesquisa 404

    Em vez de mostrar uma "página 404 não encontrada" padrão, este módulo realiza uma pesquisa nas palavras-chave no URL; por exemplo, se um usuário acessar http://example.com/does/not/exist , este módulo fará uma pesquisa para "não existe" e mostra o resultado da pesquisa em vez da página 404. Isso deve ajudar a reter os visitantes provenientes de URLs antigos vinculados de outros sites ou de índices de pesquisa.

  • Fast 404

    Drupal tem erros 404 caros. Em um site 'médio' com um carregamento de módulo 'médio', é possível observar de 60 a 100 MB de memória consumida no servidor para fornecer um 404. Considere uma página com um link .gif inválido e um arquivo .css ausente. Essa página irá gerar 2 404s junto com o carregamento real da página. É provável que você esteja procurando 180 MB de memória no servidor dessa página, em vez dos 60 MB necessários.

geekgirlweb
fonte
3

Você pode fazer isso definindo uma página em um módulo personalizado.

Crie uma página para a categoria "Página não encontrada" usando 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;
 }

Está quase bom. Mas esse código retorna:

"A página solicitada não encontrada não foi encontrada"

precisa alterar current_path () para request_uri () e retornará:

"Não foi possível encontrar a página solicitada / request_uri"

Andy Mark
fonte
1
Alterei a mensagem de erro para t('The requested page "@path" could not be found.', array('@path' => request_uri()));. Dessa forma, a tradução padrão do Drupal é usada quando o site é multilíngue.
Jeroen
Você está certo, é uma boa prática =) #
Andy Mark