2

かなり基本的な質問がありますが、それを「うまく」解決する方法に頭を悩ませることはできません。カレンダー情報を含むノードタイプがあります。ビューを使用して月ビューを適切にレンダリングし、これまでのところすべてが良好です。次に、カレンダービューに「group_xyz」タイプのノードも含めるようにしましたが、ユーザーがログインしているときにのみこれらのイベントを表示します。数行のPHPを使用してフィルタリングし、ユーザーIDとノードタイプを取得しましたが、すでにここでは、それは本当の大げさな解決策のようには感じませんでした...

私の問題として、ユーザーの役割とノードで使用されている分類用語に応じて、カレンダーの投稿の表示を制限したいと思います。

したがって、ノードには分類用語参照「visibility_to」があり、(All、Internal、Administrators)セットの1つと言えます。ユーザーは、ゲスト、ログインユーザー、または管理者のいずれかになります。

ここで、次のようにフィルタリングするための優れた方法を見つけたいと思います。ノードタイプがcalendar AND((visibility_to == "All")OR((visibility_to == "Internal")AND(role == "administrator "OR role == "logged_in")OR(visisbility_to == "Administrators" AND role == "administrator"))

私はあなたがポイントを理解していると思います...私はこれをPHPでハードコーディングすることができたと思いますが、新しい役割、新しい分類用語を追加する日は、管理インターフェースを使用してこれらすべてを構成したいと思います...

ヘルプや提案をいただければ幸いです。次のdrupalフォーラムにも投稿されています:http://drupal.org/node/1879238

4

1 に答える 1

4

OK、「Drupalish」な方法でそれを行う方法は次のとおりです。

  1. あなたの「可視性」語彙に、役割の参照であるフィールドを追加します(Drupal 7 の用語では、独自のフィールドを持つことができます -- やった!)。このタイプのフィールドを設定できるようにするには、 Role Reference モジュールをダウンロードして有効にする必要があります。私の例では、用語のロール参照フィールドを「Visibility role」と呼びます
  2. ここで、すべての表示条件を変更し、それぞれについて新しく作成された役割フィールドに入力します。基本的に、どの役割がどの期間に適用されるかを設定します。用語の後ろではなく、ノード上で直接ロール参照を持つことができると思いますが、それはあなた次第です
  3. ビューで、関係「Content:visibility」またはその用語が呼ばれるものを追加します
  4. 最後に、「可視性」という用語の役割を現在のユーザーの役割と比較するコンテキスト フィルターを追加します。上記の関係を追加した後でのみ、使用可能なコンテキスト フィルターのリストに [可視性の役割] フィールドがポップアップ表示されます。それをコンテキスト フィルターとして選択します。オプションとして「デフォルト値を指定」と「PHP コード」を選択します。 次の php コードを入力して、ノードの用語に関連付けられたロールと現在のユーザーのロールを比較します

    global $user;
    
    $current_roles = "";
    foreach ($user->roles as $key => $val) {
      $current_roles .= $key;
      if ($val != end($user->roles)){ // If not last item, add a '+' which treats these as an or
        $current_roles .= '+';
      }
    } 
    
    return($current_roles);
    

*最後に、コンテキスト フィルターの下の [その他] オプションを展開し、このフィルターに複数の値を許可するように選択してください。

試してみて、これがうまくいくかどうかお知らせください!! 私はそれをテストしましたが、私にはうまくいくようです。

于 2013-01-04T20:31:51.287 に答える