¿Cómo funcionan los filtros contextuales de Vistas?

9

¡Estoy tratando de entender nuevamente los filtros contextuales! Lo usé hace un tiempo pero me quedé totalmente perplejo nuevamente. Esto es lo que estoy tratando de hacer:

  1. Genere una página de nodo de contenido clonado con términos de taxonomía insertados en esta página clonada.

Ej .: EJEMPLO.com/botas blancas / azul

Cuando un usuario llega a la página / white-shoes, mostrará la página del nodo original orientada hacia el color blanco. Ahora, si el usuario aterriza en / white-shoes / blue, mostrará la misma página de nodo, pero esta vez todo el contenido del cuerpo se reescribirá reemplazando el color blanco con el color azul.

En Vistas , tendría que crear una visualización de página con la ruta de:% /%

Ahora crearía un filtro contextual para recuperar el nid. Agrego Content: nid como filtro contextual. Elijo PROPORCIONAR UN VALOR POR DEFECTO y pongo este código PHP:

$ x = drupal_lookup_path ('fuente', arg (0));

$ y = explotar ('/', $ x);

devolver $ y 1 ;

Ese código PHP básicamente convierte la parte / white-shoes de la URL en un NID. Pero no funciona. Probé el código a través de drush ev a través del terminal y de hecho recibí un resultado devuelto, así que sé que funciona.

Hago lo mismo para el nombre del término de taxonomía y también agrego un filtro contextual para eso. Esta vez elijo PROPORCIONAR UN VALOR POR DEFECTO y selecciono VALOR SIN PROCESAR DE URL y selecciono el segundo argumento.

ingrese la descripción de la imagen aquí

Como puede ver cuando ingreso un VALOR DE VISTA PREVIA para el filtro contextual: AAA / BBB / CCC. Mi valor predeterminado se ignora. Se supone que está tomando el segundo argumento, pero está obteniendo el primer solo. Mire la instrucción SQL DONDE y verá que está obteniendo AAA cuando debería ser BBB.

ingrese la descripción de la imagen aquí

Entonces, la pregunta es ¿qué estoy haciendo mal o hay una mejor solución para lo que quiero lograr?

Patoshi パ ト シ
fuente
Esto suena estúpido, pero ¿podrías dar un poco más de detalles? Me está costando un poco entender lo que estás intentando, más sobre cómo estás intentando hacerlo. En lugar de usar el valor sin formato o proporcionar el valor predeterminado, use la identificación de contenido de la URL. Eso proporcionará el NID.
kyletaylored
hola kyle, no hay ID de contenido desde que aterrizaste en la url: / white-shoes / blue ... la / blue url no existe como se muestra en las vistas. por lo que no hay una ID de contenido para tomar ... tiene que analizar el primer argumento de la url y luego convertir esa url en una ruta NID.
Patoshi パ ト シ

Respuestas:

5

El filtro contextual se usa para filtrar, salida de la vista por argumentos de URL, también puede pasar los argumentos manualmente en este formato:

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

donde "$ name" es el nombre de su vista (ej. 'example_view') y '$ display_id' es el tipo de visualización de su vista (ej. 'default') y "$ arg1, $ arg2, $ arg3" son argumentos al igual que en la URL.

Los argumentos de URL tienen la siguiente estructura:

http://example.com/arg_1/arg_2/arg_3 (arg_2 tiene el componente de ruta 2 (en la página de configuración de la vista)).

Cuando el valor del filtro no está disponible:

significa que drupal no puede encontrar ningún filtro.

Proporcionar valor predeterminado:

cuando el valor del filtro no está disponible, puede usar esta opción para crear un filtro para la salida de vistas, este filtro puede ser código PHP (si el módulo de filtro PHP está habilitado) o puede obtener su valor de los argumentos de URL -> (Valor sin formato de url). El cuadro de texto Excepción le permite engañar al valor y mostrar todos los resultados.

Cuando el valor del filtro está disponible

en este caso, realiza una validación según sus necesidades y algunas otras opciones, cuando drupal puede encontrar el valor del filtro.

Reza Shadman
fuente
dada la función views_embed_view (). ¿Cómo cargaría eso en mi sub ruta de / white-shoes / blue? tenga en cuenta que / blue no existe como generado por las vistas. cuando un usuario alcanza la ruta / azul, debe analizar el primer argumento y buscar el NID de ese alias y luego cargar su contenido. El problema con los filtros contextuales es que no hay forma de proporcionar un valor PHP para CUANDO EL VALOR DEL FILTRO ESTÁ DISPONIBLE.
Patoshi パ ト シ
@duckx, existe una excelente opción para proporcionar un valor PHP cuando el filtro está disponible - VALIDATION (type: PHP Code). Con esta opción, puede usar ver objeto y hacer todo lo que necesita. En su caso, la /blueruta generada por las vistas también se usaría para obtener la identificación del nodo de ese alias.
Jack-PL