web-dev-qa-db-ja.com

ノードとユーザーデータに関連するビューをフィルタリングするにはどうすればよいですか?

バウチャーというコンテンツタイプを作成しました。このコンテンツタイプには、Pointsというフィールドがあります。

一方、ユーザーがポイントを取得できるようにする http://drupal.org/project/Userpoints モジュールを有効にしました。

2つのバウチャーノードを作成しました。それらの1つはPointsフィールドの値が10で、もう1つは15です。

その後、コンテンツタイプを表示するビューを作成しました:バウチャー。次に、Pointsフィールドの値がUserよりも低い場合にのみ、バウチャーノードを表示するフィルターを追加する必要があります。 pointsvalue(現在ログに記録されているユーザー)

これを理解できるように、私のキャプチャを見てください。

enter image description here

1
chefnelone

同じフィルターをプログラムでビューに追加できます。

/**
 * Implements hook_views_pre_view().
 */
function YOURMODULE_views_pre_view(&$view, &$display_id, &$args) {
  if ($view->name == 'your_view_machine_name') {
    $info = array(
      'table' => 'field_data_field_points', // name of your “Points” field table.
      'field' => 'field_points_value', // name of value field in that table.
      'value' => array('value' => userpoints_get_current_points()), // dynamic part.
      'operator' => '<',
      'id' => 'field_data_field_points_YOURMODULE', // unique id.
      'group' => 100, // new group.
    );
    $handler = views_get_handler($info['table'], $info['field'], 'filter');

    $handler->init($view, $info);
    $view->display_handler->handlers['filter'][$info['id']] = &$handler;

    unset($handler);
  }
}

テーブルを自動的に結合し、クエリに条件を追加します。

3
kalabro