Nessun collegamento di navigazione su 404 pagine


11

Quando visito una pagina che non esiste, mi aspetto di vedere ancora i collegamenti primari e secondari come in qualsiasi altra pagina, ma quello che ottengo non sono i collegamenti di navigazione nella pagina 404. Vedi anche Nessun link di navigazione su 404 pagine .

Ho trovato una soluzione, ma sono contento se qualcos'altro può risolvere questo problema (possibilmente senza utilizzare moduli aggiuntivi).

Risposte:


14

Puoi farlo definendo una pagina in un modulo personalizzato.

Creare una pagina per la categoria "Pagina non trovata" utilizzando 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;
}

Il callback della pagina utilizza current_path()per restituire il percorso della pagina che causa l'errore 404.

Vai su Ammin.> Config> Sistema> Informazioni sul sito e inserisci la pagina non trovata (stesso nome come definito in hook_menu) nella pagina 404 predefinita (non trovata) .

snap1

Ora la pagina di errore appare come nella seguente schermata.

snap2

È chiaro che contiene tutti i collegamenti di navigazione e anche l'URL della pagina che produce l'errore (molto simile alla pagina originale non trovata). E il modulo menzionato nella risposta sopra da @ Nikhil produrrà "Impossibile trovare la pagina richiesta." ma non contiene l'URL della pagina che causa l'errore.


Sei sicuro di ottenere i link di navigazione nella pagina?
Niksmac,

1
@NikhilM Ho provato questo e gli screenshot sono reali ;-)
AjitS

L'ho provato adesso. Personalizzo il testo mostrato nella pagina non trovata della pagina. ma a quanto pare mostra il testo predefinito da qualche altra parte! cosa sta succedendo in drupal?
Shekoufeh,

Stavo lottando con questo ieri al lavoro, soluzione molto bella.
ciclico

11

C'è un modulo per farlo funzionare 404 Navigation

Nelle pagine di errore 404 Not Found, Drupal salterà il rendering di tutti i collegamenti di navigazione del tuo sito Web per motivi di prestazioni *. Alcuni di questi includono:

Il blocco "Collegamenti primari" e qualsiasi altro blocco di collegamenti di menu. I collegamenti primari e secondari del tema. * A meno che non sia stata configurata una "Pagina 404 predefinita (non trovata)" su admin / config / system / site-information.

Inoltre c'è una patch per risolvere questo problema in D7.

In D8 Vedi QUESTO anche QUESTO


6

Ci sono anche buone alternative ai moduli:

  • Cerca 404

    Invece di mostrare una "Pagina 404 non trovata" standard, questo modulo esegue una ricerca sulle parole chiave nell'URL, ad es. Se un utente accede a http://example.com/does/not/exist , questo modulo eseguirà una ricerca per "non esiste" e mostra il risultato della ricerca invece della pagina 404. Ciò dovrebbe aiutare a trattenere i visitatori provenienti da vecchi URL collegati da altri siti o da indici di ricerca.

  • 404 veloce

    Drupal ha 404 errori costosi. In un sito "medio" con un carico "medio" del modulo, è possibile visualizzare 60-100 MB di memoria consumata sul server per consegnare un 404. Si consideri una pagina con un collegamento .gif errato e un file .css mancante. Quella pagina genererà 2 404 secondi insieme al carico effettivo della pagina. Molto probabilmente stai guardando 180 MB di memoria per server quella pagina piuttosto che i 60 MB che dovrebbe richiedere.


3

Puoi farlo definendo una pagina in un modulo personalizzato.

Creare una pagina per la categoria "Pagina non trovata" utilizzando 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;
 }

È quasi buono. Ma questo codice restituisce:

"Impossibile trovare la pagina richiesta non trovata"

è necessario modificare current_path () in request_uri () e restituirà:

"Impossibile trovare la pagina richiesta / request_uri"


1
Ho cambiato il messaggio di errore in t('The requested page "@path" could not be found.', array('@path' => request_uri()));. In questo modo viene utilizzata la traduzione predefinita di Drupal quando il tuo sito è multilingue.
Jeroen,

Hai ragione, è buona pratica =)
Andy Mark il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.