Comment configurer mes vues pour renvoyer un 404 en utilisant Global: Null sous les filtres contextuels?

14

Le comportement standard de Drupal consiste à transmettre tous les arguments, qu'ils le demandent ou non. Parfois, ce comportement est souhaité. Cependant, je dois retourner un 404 pour tout sauf une chaîne de requête.

Exemple du problème http://drupal.org/project/modules http://drupal.org/project/modules/google.com <- Cela devrait renvoyer un 404; 200 donnés. Pénalité pour contenu en double!

Le module views 404 suppose que par défaut, vous ne voulez pas que les arguments soient transmis. Cependant il n'y a pas de version D7 du module.

Mais la page du projet indique que 404 pour les vues peuvent également être accomplies en définissant Global: Null sous Arguments.

Évidemment, dans D7, les "arguments" sont maintenant des "filtres contextuels", mais je ne sais pas quels paramètres ajouter au filtre contextuel Global: null pour obtenir le résultat souhaité.

Toute aide serait appréciée.

Nigel Waters
la source

Réponses:

22

Dans les filtres contextuels, sélectionnez Ajouter ; dans la boîte de dialogue qui s'affiche, sélectionnez Global: Null .

capture d'écran

Cliquez sur Ajouter et configurer des filtres contextuels .

Dans la boîte de dialogue qui apparaît ensuite, dans le jeu de champs Lorsque la valeur de filtre est disponible ou qu'une valeur par défaut est fournie , cochez Spécifier les critères de validation , sélectionnez - Validation de base - pour Validator , puis sélectionnez Afficher «Page non trouvée» pour l' action à entreprendre si le la valeur du filtre n'est pas validée . Dans le jeu de champs Plus , cochez Échouer la validation de base si un argument est donné .

capture d'écran

Je l'ai testé avec une vue "Articles" que j'ai créée, et ça marche.

capture d'écran

capture d'écran

L'argument "Global: Null" doit être le dernier. Si vous avez besoin d'un ID utilisateur, par exemple, ajoutez-le d'abord comme argument, puis ajoutez l'argument "Global: Null".

J'ai modifié la vue "Article" pour accepter un ID utilisateur comme argument, qui est utilisé pour filtrer la liste des nœuds d'article. La vue fonctionne toujours, car elle n'accepte pas d'argument supplémentaire.

capture d'écran

capture d'écran

kiamlaluno
la source
1
Cela renverra une erreur de code 403 et non 404. Sélectionnez plutôt l'option "Afficher" Page non trouvée "
Eugene Fidelin
Dans un fil sur DO, je vois quelqu'un suggérer d'utiliser arg (1) == NULL; dans le code de validation php. Est-ce mieux ou à peu près la même chose?
Nigel Waters
1
@EugeneFidelin J'étais en train de modifier l'affichage "maître", et je ne voyais pas l' option Afficher "Page non trouvée" . J'ai corrigé ma réponse.
kiamlaluno
@NigelWaters Oubliez ma réponse précédente. :)Je modifiais le mauvais affichage et la vue ne fonctionnait pas comme elle le devrait. Il n'est pas nécessaire d'utiliser du code PHP pour valider l'argument; voir la réponse mise à jour.
kiamlaluno
Je n'ai pas encore assez de points à commenter - alors postez ici pour dire merci à @kiamlaluno. Fonctionne très bien et quelque chose contre laquelle je me cognais la tête pendant un certain temps.
Blue Waters
1

Vous pouvez le faire en utilisant des vues hors fonction. Dans chaque paramètre de filtre contextuel, vous pouvez voir une case à cocher "Spécifier les critères de validation" pour voir plus de paramètres.

Ensuite, vous pouvez sélectionner "validateur" en fonction de vos conditions d'affichage. Si vous souhaitez une validation personnalisée, sélectionnez le code php. Renvoyez Vrai ou Faux dans le code php en fonction de vos conditions de validation.

Enfin, sélectionnez "Action à entreprendre" car l'accès à l'écran est refusé! Voir la capture d'écran ci-dessous pour le filtre contextuel nid.

entrez la description de l'image ici

Anil Sagar
la source
Quel est le code php que j'ajoute?
Nigel Waters
J'utilise uniquement le filtre contextuel Global: null
Nigel Waters
3
N'UTILISEZ JAMAIS DE CODE PHP DANS DES VUES OU TOUT AUTRE OUTIL UI !!!
hugronaphor