2009-12-09 7 views
1

Je me bats un peu avec une vue qui obtient des données d'un noeud qui utilise deux champs de référence de noeud, qui pointe vers le même type de contenu. De mon chemin, je reçois une chaîne comme argument, appelons-le $fruit.Relations de noeuds dans les vues Drupal

La requête que je ferais si j'écrivais moi-même la requête serait quelque chose comme SELECT * FROM recipe WHERE (fruit_1=$fruit OR fruit_2=$fruit). Mon problème est que je ne comprends pas comment faire cela dans une vue Drupal. Aucune suggestion?

MISE À JOUR: J'ai finalement résolu ce que j'essayais de faire. La solution pour moi était d'utiliser Panels avec un View en utilisant Views Or arguments, et en réglant les deux valeurs d'arguments à la même chose en utilisant le premier argument Panels. Je ne sais pas si j'explique correctement mon problème ou ma solution, mais si quelqu'un a besoin d'une explication plus détaillée, n'hésitez pas à demander.

Répondre

2

Vues Ou addon module: http://drupal.org/project/views_or

Il devrait vraiment être inclus avec des vues par défaut, car il est si puissant.

Le 'begin alternatives de l'option met essentiellement « (» dans votre requête. L'option « alternative suivante » met essentiellement le « OR » dans votre requête. L'option « alternatives de fin » place essentiellement «) » dans votre requête. Les filtres de vues sont configurés comme 'ET' entre chaque champ, ceci ajoute la capacité 'OU'. Donc, en utilisant votre exemple vos filtres serait quelque chose comme:

Content Type = Recipe 
Begin Alternatives 
Node Title = fruit_1 
Next Alternative 
Node Title = fruit_2 
End Alternatives 

Notez que vous pouvez avoir plusieurs options en utilisant ou plusieurs filtres « alternative suivante », chaque place un « OU » entre les autres filtres. Si le problème persiste, vérifiez l'aperçu de la requête dans le volet de vos vues après chaque modification.

+0

Belle trouvaille! (+1) – mac

+0

J'ai essayé Views depuis un certain temps, mais je ne sais pas comment le faire. Tant que j'ai un argument avec un 'Node ID validator', cela fonctionne comme prévu, mais quand j'ajoute un 'Next alternative' et que je valide mon deuxième champ contre la même valeur (avec' Share argument'), je reçois un vide 'WHERE', et une erreur SQL. Je ne sais pas ce que je fais mal – Marco

1

Je ne pense pas qu'il existe un moyen de faire ... OU ... une partie de votre requête dans l'interface utilisateur de Views. Cependant, vous pouvez créer votre propre module et utiliser l'interface utilisateur Views pour générer la première partie de la requête, puis utiliser hook_views_query_alter dans votre module pour ajouter simplement WHERE (fruit_1=$fruit OR fruit_2=$fruit) à la fin de la requête.

Plus d'informations sur hook_views_query_alterhere et here. Bonne chance.