web-dev-qa-db-ja.com

2つのフィールドを比較してビューをフィルタリングする方法。フィールドa <フィールドbの場合

2つの価格フィールドを持つ製品コンテンツタイプがあります。

Price-Aがprice-Bより小さいすべての製品を表示するビューを作成したいと思います。

フィルターを追加して、price-Aを選択してから、[operate less than]を選択して、値をprice-Bに設定することを望んでいましたが、それはできません。

ビューフック、主にhook_views_query_alterの使用について調査しましたが、うまくいきませんでした。

私もビューPHPモジュールを使用してみましたが、機能させることができませんでした。

誰かがこれを達成するための最良の方法を知っていますか?

17
Fadzy

あなたが探しているのはフィルター基準Global: Fields comparison :)

10
digitgopher

Drupal Answers Stack Exchangeへようこそ!Drupal現在のところ、そして私が知っているように、これを実現する簡単な方法はありません。

Views PHP モジュールを使用してこれを行うことができます。このモジュールを有効にして、フィルターを追加しますPHPフィルターは、上記のモジュールをインストールすると、ビューフィルターグローバルカテゴリから選択できます。

フィルターのPHPコードセクションに以下のようなPHPコードを追加します。

$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;
}

Field_price_aを価格Aのフィールド名に変更し、field_price_bを価格Bのフィールド名に変更します。

私はテストし、それは私のために働いた!あなたもそれをクラックできることを願っています:-)

4
Anil Sagar

この機能は、バージョン7.x-3.8以降のビューに含まれています。詳細は https://www.drupal.org/node/699252#comment-7513087 を参照してください。

0
TommyK