1

ユーザーが登録すると、ユーザープロファイルを介して1つ以上の場所に関連付けられます。場所はカスタムコンテンツタイプです。この場所との関係を定義するカスタムフィールドがユーザープロファイルにあります。

認証されていないユーザーを返し、昇格された役割のユーザーに制限されているユーザータイプのビューがあります。関連付けられた場所の値が、ビューを要求している現在のユーザーからの1つ以上の場所の値と一致する、認証されていないユーザーのみを返すフィルターを追加したいと思います。

関連付けられた場所でフィルタリングすることはできますが、その値を現在のユーザーの値に関連付けることはできません。コンテキストフィルター領域だけでなく、現在のユーザーuidをリレーションシップ領域に追加できれば、これを実行できる可能性があると思います。カスタムフィルターや関係に頼らずにこれを行うことはできますか?

編集:

多少の混乱があるかもしれないので、これは明確にするのに役立つかもしれません。

User -> Profile -> Locationデータ関連付けチェーンです。Locationの値が現在ログインしているユーザーの値と一致するユーザーのみを表示したい。

User (any) -> Profile (Student) -> Location(s) == User (current) -> Profile (admin) -> Location(s)

これを行うためにSQLを作成することはできますが、ビューのみを使用してこれを実行できるかどうか、またはカスタムの関係やフィルターが必要かどうかは不明です。

4

1 に答える 1

0

ビュー内でこれを行う唯一の方法は次のとおりです。

  1. ユーザータイプの使用を表示する
  2. Profile2タイプにリレーションシップを追加します(私の場合は「Student」)
  3. タイプprofile:student:locationのコンテキストフィルターを追加します
  4. 「デフォルト値を提供する」を選択します
  5. タイプ:「phpコード」
  6. 次のコードを使用します。

    global $user;
    $profile = profile2_load_by_user($user->uid,'facilitator');
    if (!$profile) { return ''; }
    if (!isset($profile->field_location['und'])) { return ''; }
    $locations='';
    foreach ($profile->field_location['und'] as $location) {
      $locations.=','.$location['nid'];
    }
    return substr($locations,1);
    
  7. [その他]で、[複数の値を許可する]をTRUEに設定します
  8. コンテキストフィルターを保存する

このようにPHPを使用すると、現在のユーザーをロードし、関連する値を取得してフィルター処理できます。これは、他の多くの状況や状況で役立つ場合があります。

于 2012-04-17T21:54:42.747 に答える