web-dev-qa-db-ja.com

実行したくないルールをデバッグする方法は?

グローバルフラグを設定できるノードがあります。ノードが更新されたら、そのノードのフラグを解除するルールが必要です。

  • ルールイベント:既存のコンテンツを更新した後
  • ルールアクション:ノードのフラグを解除します。

    次に、「データセレクタ」=ノード、「フラグを立てるユーザー」= node:author(グローバルフラグであるため、このフィールドは無視する必要があります)、「権限チェック」のチェックを外します。

グローバルフラグが設定されているノードを更新しても、削除されません。

間違って設定しましたか?実行したくないルールをデバッグするにはどうすればよいですか?

4
uwe

フラグモジュール

この場合、「フラグを立てるユーザー」は無視されません。

フラグがグローバルである場合、ユーザーはフラグを切り替えるために必要な権限を必ずしも持っているわけではありません。問題のフラグにフラグを立てたり、フラグをはずしたりすることがユーザーロールに許可されていることを確認してください。

ノードの「公開済み」ステータスは、「グローバルフラグ」の良い例です(フラグモジュールとは関係ありません)。publishedがTRUEの場合、コンテンツは表示され、FALSEの場合は非表示になります。フラグはグローバルですが、「コンテンツの公開」権限を持つユーザーのみがフラグを切り替えることができます。 Flagモジュールも同様に機能します。


ルールモジュール

ルールには、便利な組み込みデバッガーがあります。 admin/config/workflow/rules/settingsにあります


ルールをデバッグするときでも、通常は dd ()または dpm ()にフォールバックします。ルールは確かに信じられないほどのモジュールですが、デバッグは時として苦痛になることがあります。

4
Citricguy

Rules はすばらしいですが、期待どおりに機能しない場合はデバッグが難しいこともあります。そのようなデバッグを行うためのいくつかの典型的な機能があります(以下でさらに詳しく説明します)が、[〜#〜] k [〜#〜] eep -[〜#〜] i [〜# 〜] t -[〜#〜] s [〜#〜] uper -[〜#〜] s [〜#〜]よく使用する簡単なテクニック、私の[〜#〜] bingo [〜#〜]-trickです。このようなルールのサンプルは、「 管理者がプロファイルを更新するときに、ユーザーにメールを送信するためにどのルール条件を使用できるか に対する私の回答にあります。愚かですが、シンプルで効率的です(私は思います)。

上記の方法で解決しない場合は、以下で詳しく説明するように、通常、より高度なデバッグの方法が2つあります。

ルール評価ログ

ルールsettings内で、ルールモジュールに付属するデバッグ機能を少し試します。少なくとも "Rules Evaluation Log"を確認してください(実行中のルールロジックが実際にそのロジックが期待するものと一致することを確認するには)。

値を表示するルールアクション(develを使用)

また、(一時的に) Devel モジュールを有効にして、「一時的に」「値の表示」などのルールアクションを追加できるようにすることもできます。

明らかに、ルールアクションの実行を妨げるルール条件がないことを確認します(必要に応じて、そのようなルール条件を一時的に削除します)。

より詳しい情報

これら2つのバリエーションの詳細については、「 条件内の変数の値を表示するにはどうすればよいですか? 」の回答で説明されているように、ルールのデバッグを参照してください。

1
Pierre.Vriens