web-dev-qa-db-fra.com

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

J'ai un type de contenu de produit comportant 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 Views PHP et je n'ai pas réussi à le faire fonctionner.

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

17
Fadzy

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

10
digitgopher

Bienvenue dans le Drupal Réponses Stack Exchange! Il n'y a pas de moyen simple d'y parvenir dans Drupal vues pour l'instant, et comme je le sais).

Vous pouvez le faire en utilisant le module Views PHP . Activez ce module et ajoutez un 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 PHP code 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 :-)

4
Anil Sagar

Cette fonctionnalité est désormais incluse dans les vues à partir de la version 7.x-3.8. Voir https://www.drupal.org/node/699252#comment-7513087 pour en savoir plus.

0
TommyK