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).

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.


Ê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


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.


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"


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.