Keine Navigationslinks auf 404 Seiten

11

Wenn ich eine Seite besuche, die nicht existiert, erwarte ich weiterhin die primären und sekundären Links wie auf jeder anderen Seite, aber ich erhalte keine Navigationslinks auf der 404-Seite. Siehe auch Keine Navigationslinks auf 404 Seiten .

Ich habe eine Lösung gefunden, bin aber froh, wenn etwas anderes dies beheben kann (möglicherweise ohne zusätzliche Module).

niksmac
quelle

Antworten:

14

Sie können dies tun, indem Sie eine Seite in einem benutzerdefinierten Modul definieren.

Erstellen Sie eine Seite für die Kategorie "Seite nicht gefunden" mit 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;
}

Der Seitenrückruf wird verwendet current_path(), um den Pfad der Seite zurückzugeben, der den 404-Fehler verursacht.

Gehen Sie zu Admin> Config> System> Site-Informationen und geben Sie Seite nicht gefunden (gleicher Name wie in definiert hook_menu) auf der Seite Standard 404 (nicht gefunden) ein .

snap1

Jetzt erscheint die Fehlerseite wie im folgenden Screenshot.

snap2

Es ist klar, dass es alle Navigationslinks und auch die Seiten-URL enthält, die den Fehler verursacht (sehr ähnlich der ursprünglichen Seite, die nicht gefunden wurde). Und das in der obigen Antwort von @ Nikhil erwähnte Modul gibt "Die angeforderte Seite wurde nicht gefunden" aus. Enthält jedoch nicht die URL der Seite, die den Fehler verursacht.

AjitS
quelle
Sind Sie sicher, dass ich die Navigationslinks auf der Seite erhalten werde?
Niksmac
1
@NikhilM Ich habe dies getestet und die Screenshots sind echt ;-)
AjitS
Ich habe es gerade getestet. Ich passe den auf Seite nicht gefundener Text angezeigten Text an. aber anscheinend zeigt es den Standardtext von woanders! Was ist los in Drupal?
Shekoufeh
Ich hatte gestern bei der Arbeit damit zu kämpfen, sehr schöne Lösung.
Cyclonecode
11

Es gibt ein Modul, mit dem dies funktioniert. 404 Navigation

Auf 404 Not Found-Fehlerseiten überspringt Drupal aus Leistungsgründen * das Rendern aller Navigationslinks Ihrer Website. Einige davon sind:

Der Block "Primäre Links" und alle anderen Menü-Links blockieren. Die primären und sekundären Links Ihres Themas. * Es sei denn, Sie haben eine "Standard 404 (nicht gefunden) Seite" unter admin / config / system / site-information konfiguriert.

Es gibt auch einen Patch , um dies in D7 zu beheben.

In D8 Siehe DIESES auch DIESES

niksmac
quelle
6

Es gibt auch gute Modulalternativen:

  • Suche 404

    Anstatt eine Standard-Seite "404 Seite nicht gefunden" anzuzeigen, führt dieses Modul eine Suche nach den Schlüsselwörtern in der URL durch. Wenn ein Benutzer beispielsweise zu http://example.com/does/not/exist wechselt , führt dieses Modul eine Suche durch für "existiert nicht" und zeigt das Ergebnis der Suche anstelle der 404-Seite. Dies soll dazu beitragen, dass Besucher von alten URLs, die von anderen Websites oder von Suchindizes verlinkt wurden, nicht mehr kommen.

  • Schnell 404

    Drupal hat teure 404 Fehler. Auf einer "durchschnittlichen" Site mit einer "durchschnittlichen" Modullast können Sie 60-100 MB Speicher auf Ihrem Server belegen, um eine 404 zu liefern. Betrachten Sie eine Seite mit einem fehlerhaften GIF-Link und einer fehlenden CSS-Datei. Diese Seite generiert 2 404s zusammen mit der tatsächlichen Auslastung der Seite. Sie sehen höchstwahrscheinlich 180 MB Arbeitsspeicher für den Server dieser Seite und nicht die 60 MB, die dafür benötigt werden.

geekgirlweb
quelle
3

Sie können dies tun, indem Sie eine Seite in einem benutzerdefinierten Modul definieren.

Erstellen Sie mit hook_menu () eine Seite für die Kategorie "Seite nicht gefunden".

 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;
 }

Es ist fast gut. Dieser Code gibt jedoch Folgendes zurück:

"Die angeforderte Seite Seite nicht gefunden konnte nicht gefunden werden"

muss current_path () in request_uri () ändern und wird zurückgeben:

"Die angeforderte Seite / request_uri wurde nicht gefunden"

Andy Mark
quelle
1
Ich habe die Fehlermeldung in geändert t('The requested page "@path" could not be found.', array('@path' => request_uri()));. Auf diese Weise wird die Standard-Drupal-Übersetzung verwendet, wenn Ihre Site mehrsprachig ist.
Jeroen
Sie haben Recht, es ist eine gute Übung =)
Andy Mark