私はDrupal 7を使用していて、記事のコンテンツタイプに3つのフラグを作成しました。これらのフラグはグローバルフラグです:bad
、Nice
およびcool
。ここで、ユーザーが既に記事にフラグを付けたかどうかを確認するためのルールを作成します。
たとえば、ユーザーが記事にbad
のフラグを立てます。今度は、ユーザーが同じ記事にNice
としてフラグを付けたいと考えています。理論的には、ユーザーはbad
をフラグ解除し、Nice
をフラグ解除する必要があります。
ユーザーが既にノードにフラグを付けているかどうかをチェックするルールが必要です。はいの場合、前のフラグのフラグを解除する必要があります。
ルールには、phpコードを実行できるルール条件がありますが、フラグapiには$flag-is_flagged
フラグが非グローバルフラグである場合にのみ、ユーザーがノードにフラグを立てたかどうかをチェックする関数。
何か案が?
あなたが達成しようとしていること(=ユーザーが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"
}
}
]
}
}
上記のルールに関する詳細:
両方のフラグのマシン名を最初に適合させれば、上記のルールを自分のサイトにインポートできるはずです(this_is_Nice
およびthis_is_bad
)自分のマシン名に合わせる。
「cool」フラグに同様のロジックを実装する場合は、上記のサンプルルールのルール条件とルールアクションをルールコンポーネントに向けて作り直すことができます(たとえば、「Disallow BAD flag」という名前を付けます)")、および上記のルールから削除します。次に、このルールコンポーネントを "Cool"フラグの類似のコンポーネントに複製します(たとえば、 "Disallow COOL flag"という名前を付けます)。すべての "bad"を"涼しい"。最後に、上記のサンプルルールの追加のルールアクション(1つずつ)を介して両方のルールコンポーネントを呼び出します。
または、 条件付きルール モジュールを使用して、両方のルールを1つのルールに統合できます。上記のルールのバリエーションを次に示します(マシン名にフラグを使用するthis_is_Nice
、this_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"
}
}
]
}
]
}
]
}
}
簡単、いいえ?