Comment filtrer la vue en comparant 2 champs. Si champ-a <champ-b

18

J'ai un type de contenu de produit qui comporte 2 champs de prix.

Je veux créer une vue qui montre tous les produits où le prix-A est inférieur au prix-B.

J'espérais que je pourrais simplement ajouter un filtre et sélectionner le prix-A puis choisir opérer moins que et définir la valeur comme prix-B, mais vous ne pouvez pas le faire.

J'ai cherché à utiliser un hook de vues, principalement hook_views_query_alter, mais je n'ai pas eu de chance.

J'ai également essayé d'utiliser le module PHP Views et je n'ai pas réussi à le faire fonctionner.

Quelqu'un connaît-il la meilleure façon d'y parvenir?

Fadzy
la source

Réponses:

10

Ce que vous recherchez, ce sont les critères de filtrage Global: Fields comparison:)

digitgopher
la source
3
Ce devrait être la réponse acceptée.
joe_flash du
4

Bienvenue sur le Drupal Answers Stack Exchange! Il n'y a aucun moyen simple d'y parvenir dans les vues Drupal pour l'instant, et comme je le sais.

Vous pouvez le faire en utilisant le module PHP Views . Activez ce module et ajoutez un filtre filtre PHP que vous pouvez sélectionner dans le filtre de vues Catégorie globale une fois que vous avez installé le module ci-dessus.

Ajoutez du code php quelque chose comme ci-dessous dans la section code PHP du filtre.

$node = node_load($data->nid);

$field_a = field_get_items('node', $node, 'field_price_a');
$price_a = field_view_value('node', $node, 'field_price_a', $field_a[0]);

$field_b = field_get_items('node', $node, 'field_price_b');
$price_b = field_view_value('node', $node, 'field_price_b', $field_b[0]);

if ($price_a >= $price_b) {
  return TRUE;
}

Modifiez field_price_a avec votre nom de champ Price A et field_price_b avec votre nom de champ Price B.

J'ai testé et cela a fonctionné pour moi! J'espère que vous pourrez le casser aussi :-)

Anil Sagar
la source
Merci pour la suggestion. Je ne parviens toujours pas à le faire fonctionner avec ce morceau de code et j'ai utilisé les champs qui s'affichent lors de l'exécution de dsm ($ data); Je pense que je pourrais aussi ajouter une case à cocher et filtrer si la case est cochée. Merci de votre aide.
Fadzy
Pendant ce temps, il est possible avec des vues, sans aucun codage personnalisé ou tout module contribué nécessaire.
Елин Й.
-1

http://drupal.org/project/views_dependent_filters est assez utile ...

Le bouton d'ajout de "Filter Criteria" a de nouvelles sous-sources. Auto-explication une fois que vous l'essayez ...

EDIT: désolé, mais pas pour> ou <, mais pour les groupes de filtres qui peuvent être séparés par OR

sinini
la source
-2

Si le prix est un champ de votre type de contenu, dans les vues Drupal 7, vous pouvez automatiquement et facilement choisir un comparateur de champs. Je suppose que cela devrait fonctionner.

Saurav
la source