¿Cómo configuro mis vistas para devolver un 404 usando Global: Null en filtros contextuales?

14

El comportamiento estándar de Drupal es pasar todos los argumentos, ya sea que lo hayan solicitado o no. A veces se desea este comportamiento. Sin embargo, necesito devolver un 404 para cualquier cosa que no sea una cadena de consulta.

Ejemplo del problema http://drupal.org/project/modules http://drupal.org/project/modules/google.com <- Esto debería devolver un 404; 200 dados. Contenido duplicado penalización!

El módulo de vistas 404 asume que, de forma predeterminada, no desea pasar los argumentos. Sin embargo, no hay una versión D7 del módulo.

Pero la página del proyecto dice que los 404 para las vistas también se pueden lograr estableciendo Global: Null en Argumentos.

Obviamente en D7 los "argumentos" ahora son "filtros contextuales", pero no estoy seguro de qué configuraciones agregar al Global: filtro contextual nulo para obtener el resultado deseado.

Cualquier ayuda sería apreciada.

Nigel Waters
fuente

Respuestas:

22

En los filtros contextuales, seleccione Agregar ; en el cuadro de diálogo que aparece, seleccione Global: nulo .

captura de pantalla

Haga clic en Agregar y configure filtros contextuales .

En el cuadro de diálogo que aparece a continuación, en el conjunto de campos Cuando el valor del filtro esté disponible o se proporcione un valor predeterminado , marque Especificar criterios de validación , seleccione - Validación básica - para Validator , y seleccione Mostrar "Página no encontrada" para la Acción a tomar si El valor del filtro no se valida . En el conjunto de campos Más , marque Validar validación básica si se proporciona algún argumento .

captura de pantalla

Lo probé con una vista de "Artículos" que creé, y funciona.

captura de pantalla

captura de pantalla

El argumento "Global: nulo" debe ser el último. Si necesita un ID de usuario, por ejemplo, primero lo agrega como argumento y luego agrega el argumento "Global: nulo".

Modifiqué la vista "Artículo" para aceptar una ID de usuario como argumento, que se utiliza para filtrar la lista de nodos de artículos. La vista aún funciona, ya que no acepta un argumento adicional.

captura de pantalla

captura de pantalla

kiamlaluno
fuente
1
Esto devolverá 403 no 404 error de código. Seleccione la opción "Mostrar" Página no encontrada "en su lugar
Eugene Fidelin
En un hilo sobre DO, veo a alguien sugiriendo usar arg (1) == NULL; en el código de validación de php. ¿Es esto mejor o más o menos lo mismo?
Nigel Waters
1
@ EugeneFidelin Estaba editando la pantalla "maestra" y no veía la opción Mostrar "Página no encontrada" . Corrija mi respuesta.
kiamlaluno
@NigelWaters Olvide mi respuesta anterior. :)Estaba editando la pantalla incorrecta y la vista no funcionaba como debería. No hay necesidad de usar código PHP para validar el argumento; ver la respuesta actualizada
kiamlaluno
Todavía no tengo suficientes puntos para comentar, así que publique aquí para agradecer a @kiamlaluno. Funciona muy bien y algo contra lo que me golpeé la cabeza por un tiempo.
Blue Waters
1

Puede hacerlo utilizando las vistas de la funcionalidad lista para usar. En cada configuración de filtro contextual puede ver una casilla de verificación "Especificar criterios de validación", verifique eso para ver más configuraciones.

Luego, puede seleccionar "validador" en función de las condiciones de su vista. Si desea validar de forma personalizada, seleccione el código php. Devuelve Verdadero o Falso en el código php según sus condiciones de validación

Finalmente, seleccione "Acción a tomar" como Acceso de pantalla denegado. Vea a continuación la captura de pantalla para el filtro contextual nid.

ingrese la descripción de la imagen aquí

Anil Sagar
fuente
¿Cuál es el código php que agrego?
Nigel Waters
Solo estoy usando el filtro contextual Global: nulo
Nigel Waters
3
¡NUNCA UTILICE EL CÓDIGO PHP EN VISTAS O CUALQUIER OTRA HERRAMIENTA UI!
hugronaphor