web-dev-qa-db-ja.com

フラグ:フラグ解除ルールにフラグを立てる、ユーザーがすでにノードにフラグを立てているかどうかを確認する方法は?

私はDrupal 7を使用していて、記事のコンテンツタイプに3つのフラグを作成しました。これらのフラグはグローバルフラグです:badNiceおよびcool。ここで、ユーザーが既に記事にフラグを付けたかどうかを確認するためのルールを作成します。

たとえば、ユーザーが記事にbadのフラグを立てます。今度は、ユーザーが同じ記事にNiceとしてフラグを付けたいと考えています。理論的には、ユーザーはbadをフラグ解除し、Niceをフラグ解除する必要があります。

ユーザーが既にノードにフラグを付けているかどうかをチェックするルールが必要です。はいの場合、前のフラグのフラグを解除する必要があります。

ルールには、phpコードを実行できるルール条件がありますが、フラグapiには$flag-is_flaggedフラグが非グローバルフラグである場合にのみ、ユーザーがノードにフラグを立てたかどうかをチェックする関数。

何か案が?

2
Germano Carella

あなたが達成しようとしていること(=ユーザーが3つのフラグのうちの1つでノードにフラグを立てることを許可する)は、設計上globalフラグを使用して実装できるものではありません。個々のユーザーはグローバルフラグを使用できないからです。したがって、これらのフラグの設計を再考/再作成して、フラグがグローバルとして定義されないようにすることをお勧めします。これを実行したら、 Rules モジュールを使用して、PHPコードを必要とせずに、実行しようとしていることを実装できます。読み取りこれを行う方法の詳細については、以下を参照してください。

このルールを見てください(ルールのエクスポート形式):

{ "rules_unflag_related_flags" : {
    "LABEL" : "Unflag related flags",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "flag" ],
    "ON" : { "flag_flagged_this_is_Nice" : [] },
    "IF" : [
      { "flag_flagged_node" : {
          "flag" : "this_is_bad",
          "node" : [ "flagged-node" ],
          "flagging_user" : [ "flagging_user" ]
        }
      }
    ],
    "DO" : [
      { "flag_unflagnode" : {
          "flag" : "this_is_bad",
          "node" : [ "flagged-node" ],
          "flagging_user" : [ "flagging_user" ],
          "permission_check" : "1"
        }
      }
    ]
  }
}

上記のルールに関する詳細:

  • ルールイベント:ノードに「ニース」のフラグが付けられました。
  • ルール条件:フラグが立てられたユーザーによって、フラグが立てられたノードにフラグ「不良」のフラグが付けられます。
  • ルールアクション:フラグを設定しているユーザーが、フラグ「Bad」のフラグを付けたノードのフラグを解除します。

両方のフラグのマシン名を最初に適合させれば、上記のルールを自分のサイトにインポートできるはずです(this_is_Niceおよびthis_is_bad)自分のマシン名に合わせる。

ニースでは不十分な場合(そしてそれもクールなはずです...)

「cool」フラグに同様のロジックを実装する場合は、上記のサンプルルールのルール条件とルールアクションをルールコンポーネントに向けて作り直すことができます(たとえば、「Disallow BAD flag」という名前を付けます)")、および上記のルールから削除します。次に、このルールコンポーネントを "Cool"フラグの類似のコンポーネントに複製します(たとえば、 "Disallow COOL flag"という名前を付けます)。すべての "bad"を"涼しい"。最後に、上記のサンプルルールの追加のルールアクション(1つずつ)を介して両方のルールコンポーネントを呼び出します。

または、 条件付きルール モジュールを使用して、両方のルールを1つのルールに統合できます。上記のルールのバリエーションを次に示します(マシン名にフラグを使用するthis_is_Nicethis_is_badおよびthis_is_cool)、そのようなルールがどのように見えるかを説明します:

{ "rules_unflag_related_flags" : {
    "LABEL" : "Unflag related flags",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules_conditional", "flag" ],
    "ON" : { "flag_flagged_this_is_Nice" : [] },
    "DO" : [
      { "CONDITIONAL" : [
          {
            "IF" : { "flag_flagged_node" : {
                "flag" : "this_is_bad",
                "node" : [ "flagged-node" ],
                "flagging_user" : [ "flagging_user" ]
              }
            },
            "DO" : [
              { "flag_unflagnode" : {
                  "flag" : "this_is_bad",
                  "node" : [ "flagged-node" ],
                  "flagging_user" : [ "flagging_user" ],
                  "permission_check" : "1"
                }
              }
            ]
          },
          {
            "ELSE IF" : { "flag_flagged_node" : {
                "flag" : "this_is_cool",
                "node" : [ "flagged-node" ],
                "flagging_user" : [ "flagging_user" ]
              }
            },
            "DO" : [
              { "flag_unflagnode" : {
                  "flag" : "this_is_cool",
                  "node" : [ "flagged-node" ],
                  "flagging_user" : [ "flagging_user" ],
                  "permission_check" : "1"
                }
              }
            ]
          }
        ]
      }
    ]
  }
}

簡単、いいえ?

1
Pierre.Vriens