Comment fonctionnent les filtres contextuels de Views?

9

J'essaie à nouveau de faire le tour des filtres contextuels! Je l'ai utilisé il y a quelque temps, mais je suis à nouveau totalement perplexe. Voici ce que j'essaie de faire:

  1. Générez une page de nœud de contenu cloné avec des termes de taxonomie insérés dans cette page clonée.

ex.: EXAMPLE.com/white-shoes/blue

Lorsqu'un utilisateur atteint la page / white-shoes, il affichera la page du nœud d'origine orientée vers la couleur blanche. Maintenant, si l'utilisateur atterrit sur / white-shoes / blue, il affichera la même page de nœud, mais cette fois tout le contenu du corps sera réécrit en remplaçant la couleur blanche par la couleur bleue.

Dans les vues, je devrais créer un affichage de page avec le chemin d'accès:% /%

Maintenant, je créerais un filtre contextuel pour récupérer le nid. J'ajoute Content: nid comme filtre contextuel. Je choisis FOURNIR UNE VALEUR PAR DÉFAUT et je mets ce code PHP:

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

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

retourner $ y 1 ;

Ce code PHP convertit essentiellement la partie / white-shoes de l'URL en NID. Mais ça ne marche pas. J'ai testé le code via drush ev via le terminal et j'obtiens en effet un résultat renvoyé, donc je sais que cela fonctionne.

Je fais de même pour le nom du terme de taxonomie et j'ajoute un filtre contextuel pour cela également. Cette fois, je choisis FOURNIR UNE VALEUR PAR DÉFAUT et je sélectionne RAW VALUE FROM URL et je sélectionne le 2e argument.

entrez la description de l'image ici

Comme vous pouvez le voir lorsque j'entre une VALEUR D'APERÇU pour le filtre contextuel: AAA / BBB / CCC. Ma valeur par défaut est ignorée. Il est censé saisir le 2e argument, mais il n'obtient que le 1er. Regardez l'instruction SQL OERE et vous verrez qu'elle obtient AAA alors qu'elle devrait être BBB.

entrez la description de l'image ici

La question est donc de savoir ce que je fais mal ou existe-t-il une meilleure solution à ce que je veux accomplir?

Patoshi パ ト シ
la source
Cela semble stupide, mais pourriez-vous fournir un peu plus de détails? J'ai un peu de temps à comprendre ce que vous essayez, plus sur la façon dont vous essayez de le faire. Au lieu d'utiliser la valeur Raw ou la valeur par défaut, utilisez l'ID de contenu à partir de l'URL. Cela fournira le NID.
kyletaylored
salut kyle, il n'y a pas d'ID de contenu depuis votre atterrissage sur l'url: / white-shoes / blue .... l'url / blue n'existe pas car elle est rendue par les vues. il n'y a donc pas d'ID de contenu à récupérer ... il doit analyser le 1er argument de l'URL puis convertir cette URL en un chemin NID.
Patoshi パ ト シ

Réponses:

5

Le filtre contextuel est utilisé pour filtrer la sortie de la vue par des arguments URL, vous pouvez également passer les arguments manuellement dans ce format:

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

où "$ name" est le nom de votre vue (ex. 'example_view') et '$ display_id' est le type d'affichage de votre vue (ex. 'default') et "$ arg1, $ arg2, $ arg3" sont des arguments comme dans l'URL.

Les arguments URL ont la structure suivante:

http://example.com/arg_1/arg_2/arg_3 (arg_2 a le composant de chemin d'accès 2 (dans la page des paramètres d'affichage)).

Lorsque la valeur du filtre n'est pas disponible:

cela signifie que drupal ne trouve aucun filtre.

Fournissez la valeur par défaut:

lorsque la valeur du filtre n'est pas disponible, vous pouvez utiliser cette option pour créer un filtre pour la sortie des vues, ce filtre peut être du code PHP (si le module de filtre PHP est activé) ou il peut obtenir sa valeur à partir des arguments URL -> (valeur brute de l'url). La zone de texte Exception vous permet de tricher la valeur et d'afficher tous les résultats.

Lorsque la valeur du filtre est disponible

dans ce cas, vous effectuez une validation selon vos besoins et quelques autres options, lorsque drupal peut trouver la valeur du filtre.

Reza Shadman
la source
étant donné la fonction views_embed_view (). comment pourrais-je charger cela dans mon sous-chemin de / white-shoes / blue? gardez à l'esprit que / blue n'existe pas car il est généré par les vues. lorsqu'un utilisateur atteint le chemin / blue, il doit analyser le 1er argument et récupérer le NID de cet alias, puis charger son contenu. le problème avec les filtres contextuels est qu'il n'y a aucun moyen de fournir une valeur PHP pour QUAND LA VALEUR DU FILTRE EST DISPONIBLE.
Patoshi パ ト シ
@duckx, Il existe une excellente option pour fournir une valeur PHP lorsque le filtre est disponible - VALIDATION (type: PHP Code). Avec cette option, vous pouvez utiliser la vue objet et faire tout ce dont vous avez besoin. Dans votre cas, le /bluechemin généré par les vues serait également utilisé pour récupérer l'ID de nœud de cet alias.
Jack-PL