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.