Come posso impostare le mie visualizzazioni per restituire un 404 utilizzando Global: Null in filtri contestuali?


14

Il comportamento standard di Drupal consiste nel passare tutti gli argomenti, indipendentemente dal fatto che lo richiedano. A volte questo comportamento è desiderato. Tuttavia, devo restituire un 404 per tutto tranne che una stringa di query.

Esempio del problema http://drupal.org/project/modules http://drupal.org/project/modules/google.com <- Questo dovrebbe restituire un 404; 200 dati. Duplice penalità sui contenuti!

Il modulo delle visualizzazioni 404 presuppone che per impostazione predefinita non si desideri passare gli argomenti. Tuttavia, non esiste una versione D7 del modulo.

Ma la pagina del progetto afferma che i 404 per le viste possono anche essere realizzati impostando Global: Null in Arguments.

Ovviamente in D7 gli "argomenti" ora sono "filtri contestuali", ma non sono sicuro di quali impostazioni aggiungere al filtro Global: null contestuale per ottenere il risultato desiderato.

Qualsiasi aiuto sarebbe apprezzato.

Risposte:


22

In Filtri contestuali selezionare Aggiungi ; nella finestra di dialogo che appare, selezionare Globale: null .

immagine dello schermo

Fai clic su Aggiungi e configura i filtri contestuali .

Nella finestra di dialogo che appaiono accanto, nel fieldset Quando il valore di filtro è disponibile o un default è previsto , controllare Specificare i criteri di convalida , selezionare - validazione di base - per Validator e selezionare Show "Pagina non trovata" per Azione da intraprendere se il il valore del filtro non viene convalidato . Nel campo Altro , selezionare Non convalida di base se viene fornito un argomento .

immagine dello schermo

L'ho provato con una vista "Articoli" che ho creato e funziona.

immagine dello schermo

immagine dello schermo

L'argomento "Global: Null" deve essere l'ultimo. Se è necessario un ID utente, ad esempio, prima lo si aggiunge come argomento, quindi si aggiunge l'argomento "Global: Null".

Ho modificato la vista "Articolo" per accettare un ID utente come argomento, che viene utilizzato per filtrare l'elenco dei nodi dell'articolo. La vista funziona ancora, in quanto non accetta un argomento aggiuntivo.

immagine dello schermo

immagine dello schermo


1
Ciò restituirà 403 non 404 errore di codice. Seleziona invece l'opzione "Mostra" Pagina non trovata "
Eugene Fidelin,

In un thread su DO vedo qualcuno che suggerisce di usare arg (1) == NULL; nel codice di convalida php. È meglio o praticamente la stessa cosa?
Nigel Waters,

1
@EugeneFidelin Stavo modificando il display "master" e non vedevo l' opzione Mostra "Pagina non trovata" . Ho corretto la mia risposta.
kiamlaluno

@NigelWaters Dimentica la mia risposta precedente. :)Stavo modificando il display sbagliato e la vista non funzionava come dovrebbe. Non è necessario utilizzare il codice PHP per convalidare l'argomento; vedi la risposta aggiornata.
kiamlaluno

Non ho ancora abbastanza punti per commentare, quindi postando qui per dire grazie a @kiamlaluno. Funziona alla grande e qualcosa su cui mi sono sbattuto la testa per un po '.
Blue Waters,

1

Puoi farlo usando le funzionalità out of the box. In ogni impostazione del filtro contestuale è possibile visualizzare la casella di controllo "Specifica criteri di convalida" per vedere più impostazioni.

Quindi, è possibile selezionare "validatore" in base alle condizioni di visualizzazione. Se desideri convalidare personalizzato, seleziona il codice php. Restituisci True o False nel codice php in base alle tue condizioni di convalida.

Infine, seleziona "Azione da intraprendere" come Accesso display negato! Vedi sotto screenshot per il filtro contestuale nid.

inserisci qui la descrizione dell'immagine


Qual è il codice php che aggiungo?
Nigel Waters,

Sto usando solo il filtro contestuale Global: null
Nigel Waters,

3
MAI USARE IL CODICE PHP IN VISUALIZZAZIONI O QUALUNQUE ALTRO STRUMENTO UI !!!
Hugronaphor,
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.