Modello personalizzato per 404 pagine di errore


12

Una rapida domanda noob qui! Come impostare un tema per utilizzare un modello personalizzato per 404 pagine di errore anziché utilizzare page.tpl?

Risposte:


10

Segui questi passi:

  1. Crea una nuova pagina usando il modulo Pannelli (Pagina vuota o inserisci qualsiasi contenuto)

  2. In admin / config / system / site-information imposta la pagina 404 predefinita (non trovata) sulla tua nuova pagina

  3. Sostituisci il file modello per quella pagina (pagina - error.tpl.php)

  4. Rimuovi tutte le regioni che non ti servono e inserisci il tuo codice


5
E non è nemmeno necessario utilizzare i pannelli. Anche il modulo che gestisce una pagina o il nodo "Pagina di base" più semplice farebbe altrettanto.
Mołot,

2
Perché avresti bisogno di un modulo contribuito per creare un 404?
MrUpsidown,

1
Il problema con l'utilizzo di un nodo, ad esempio una pagina di base, è che verrà visualizzato nei risultati di ricerca e in altri elenchi relativi al contenuto, il che è indesiderabile.
rooby

27

Ancora un'altra soluzione da questa discussione che funziona senza pannelli o altri moduli personalizzati.

Nella cartella del tema individuare template.phpe scrivere questo codice. Sostituisci YOURTHEMEcon il nome del tuo tema:

function YOURTHEME_preprocess_page(&$vars) {
  $header = drupal_get_http_header('status'); 
  if ($header == '404 Not Found') {     
    $vars['theme_hook_suggestions'][] = 'page__404';
  }
}

Ogni volta che si verifica 404, page--404.tpl.phpverrà utilizzato. Ricorda di inserire "-" non "__" nel nome del tuo file modello.


Ricorda di cancellare la cache se hai appena creato il page--404.tpl.phpfile.
Blake Erickson,

Per 403, $ header == '403 proibito'.
Henry,

questo non sembra funzionare in un modulo, il modello nella cartella del modulo non viene superato. come fare lo stesso con la funzione YOURMODULE_preprocess_page (& $ vars)?
Matoeil,

3

Se vuoi avere una pagina 404 personalizzata che non comporta la creazione di una pagina (nodo), usa il modulo customerror .

Se hai una pagina 404 in Drupal, verrà mostrata nei risultati di ricerca e / o nei tuoi elenchi di Views.

Quando si utilizza il modulo customerror, è possibile sovrascrivere il modello creando una pagina - customerror.tpl.php nella cartella del tema. Ricorda anche di svuotare la cache dopo aver creato un nuovo file modello.


Sembrava buono, ma per quelli di voi che usano anche il modulo di reindirizzamento sembra che non suonino bene insieme. Non potrei mai ottenere customerror per mostrare la sua pagina su ciò che il reindirizzamento ha mostrato.
Evanmcd,

1
Usiamo i moduli Redirect e Customerror all'unisono senza questi problemi. Esaminando le pagine delle impostazioni di entrambi i moduli, sembra che customerror (oltre alla sua funzionalità di errore personalizzata) abbia anche una funzione per la gestione dei reindirizzamenti, sebbene con un'interfaccia grezza. Se stai utilizzando il reindirizzamento (e l'OP non lo è), evita semplicemente di utilizzare le impostazioni di reindirizzamento personalizzate e non dovresti avere problemi.
alexkb,

0

Senza assumere alcuna convenzione che possa esistere nella base dei temi, la domanda è finalmente come posso sapere con certezza quale file modello utilizzare ...

Ecco i passaggi:

  1. Crea una base di base e chiamala come vuoi.
  2. Assegna quella pagina alla risposta 404 admin / config / system / site-information
  3. Abilita la modalità theme_debug.
  4. Digita uno stupido URL nella barra degli indirizzi.
  5. Arrivi sulla tua pagina inizialmente creata
  6. Guarda l'origine e il suggerimento dei modelli, otterrai qualcosa del tipo:inserisci qui la descrizione dell'immagine

  7. È semplice, nessun file di preelaborazione o template.php da modificare.

Io stesso ho scelto quello contrassegnato da un'ascia, poiché volevo qualcosa di nudo con una foto piena di cornici e solo un link sul retro.


Nota che la pagina di base che hai creato per l'errore 404 ora apparirà anche nei risultati di ricerca come pagina di contenuto.
rooby
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.