Aucun lien de navigation sur 404 pages

11

Lorsque je visite une page qui n'existe pas, je m'attends à voir toujours les liens principaux et secondaires comme sur n'importe quelle autre page, mais ce que j'obtiens n'est pas des liens de navigation dans la page 404. Voir aussi Pas de liens de navigation sur 404 pages .

J'ai trouvé une solution, mais je suis heureux si quelque chose d'autre peut résoudre ce problème (éventuellement sans utiliser de modules supplémentaires).

niksmac
la source

Réponses:

14

Vous pouvez le faire en définissant une page dans un module personnalisé.

Créez une page pour la catégorie "Page non trouvée" à l'aide de 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;
}

Le rappel de page utilise current_path()pour renvoyer le chemin de la page provoquant l'erreur 404.

Allez dans Admin> Config> System> Site-information , et entrez page-not-found (même nom que défini dans hook_menu) sous Default 404 (not found) page .

snap1

Maintenant, la page d'erreur apparaît comme dans la capture d'écran suivante.

snap2

Il est clair qu'il contient tous les liens de navigation, ainsi que l'URL de la page générant l'erreur (très similaire à la page d'origine introuvable). Et le module mentionné dans la réponse ci-dessus par @ Nikhil affichera "La page demandée est introuvable." mais ne contient pas l'URL de la page à l'origine de l'erreur.

AjitS
la source
Êtes-vous sûr d'obtenir les liens de navigation dans la page?
niksmac
1
@NikhilM J'ai testé cela et les captures d'écran sont réelles ;-)
AjitS
Je l'ai testé en ce moment. Je personnalise le texte affiché dans la page page non trouvée. mais apparemment, il montre le texte par défaut d'ailleurs! que se passe-t-il dans drupal?
shekoufeh
Je me débattais avec ça hier au travail, très belle solution.
Cyclonecode
11

Il existe un module pour que cela fonctionne 404 Navigation

Sur les pages d'erreur 404 Not Found, Drupal sautera le rendu de tous les liens de navigation de votre site Web pour des raisons de performances *. Certains d'entre eux comprennent:

Le bloc "Liens principaux" et tout autre bloc de liens de menu. Les liens principaux et les liens secondaires de votre thème. * Sauf si vous avez configuré une "page 404 par défaut (introuvable)" dans admin / config / system / site-information.

Il existe également un correctif pour résoudre ce problème dans D7.

En J8 Voir CE Aussi CE

niksmac
la source
6

Il existe également de bonnes alternatives de modules:

  • Rechercher 404

    Au lieu d'afficher une "page 404 non trouvée" standard, ce module effectue une recherche sur les mots clés dans l'URL, par exemple si un utilisateur accède à http://example.com/does/not/exist , ce module fera une recherche pour "n'existe pas" et affiche le résultat de la recherche au lieu de la page 404. Cela devrait aider à retenir les visiteurs provenant d'anciennes URL liées à partir d'autres sites ou d'index de recherche.

  • Fast 404

    Drupal a des erreurs 404 coûteuses. Sur un site «moyen» avec une charge de module «moyenne», vous pouvez regarder 60-100 Mo de mémoire consommée sur votre serveur pour fournir un 404. Considérez une page avec un mauvais lien .gif et un fichier .css manquant. Cette page générera 2 404 avec la charge réelle de la page. Vous recherchez probablement 180 Mo de mémoire sur cette page plutôt que les 60 Mo nécessaires.

geekgirlweb
la source
3

Vous pouvez le faire en définissant une page dans un module personnalisé.

Créez une page pour la catégorie "Page non trouvée" à l'aide de 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;
 }

C'est presque bon. Mais ce code renvoie:

"La page demandée page introuvable est introuvable"

besoin de changer current_path () en request_uri () et retournera:

"La page demandée / request_uri est introuvable"

Andy Mark
la source
1
J'ai changé le message d'erreur en t('The requested page "@path" could not be found.', array('@path' => request_uri()));. De cette façon, la traduction Drupal par défaut est utilisée lorsque votre site est multilingue.
Jeroen
Vous avez raison, c'est une bonne pratique =)
Andy Mark