web-dev-qa-db-ja.com

検証されたルールイベントユーザーアカウントを使用して、ルールアクションが2回発生するのを防ぐ方法は?

アカウントをアクティブにしたときにHTMLメールを送信するルールを設定しました。次のような通知が返されるようです。

通知:未定義の変数:SmtpMailSystem-> mail()の添付ファイル

とにかくメールを送信しているようですが、テストするたびに2通のメールが届くことがわかりません。ログファイルを確認したところ、匿名ユーザーが検証URLを使用してメールアドレスを確認し、メールを送信したことがログに記録されているようです。次に、この新しいユーザーのセッションを開き、再度メールを送信します。

ユーザーアカウントがアクティブ化されたとき」で実行するようにルールを設定しましたルールをオフにするとメールが届かないので、他にもメールを送信しているものはありません。これはこのルールだけで、2度実行するようです。

誰かが解決策を提供できますか?

[〜#〜] smtp [〜#〜]Mimemail および Mail System モジュールを使用しています

誰かがルール、またはエラーや電子メールのテキストなどの詳細を投稿する必要がある場合は、質問してください。役に立たない可能性がある場合は、大量のコードブロックで投稿を殺したくありませんでした。

EDIT1

ログファイルの出力(当然のことながら、意味がわかるように順序を逆にしました。ログファイルは、最新のものを最初にしています)

  • 新しいユーザー:unset_username([email protected])。 //新しいアカウントを作成したとき
  • 「Firstname Lastname」にメールを送信します//確認リクエストをメールで送信します
  • タイムスタンプ付きの姓名に使用される電子メール検証URL ...
  • 「Firstname Lastname」にメールを送信します//確認メールを1回送信します
  • Firstname Lastnameのセッションが開かれました。
  • 「Firstname Lastname」へのメールの送信//確認メールを再度メールで送信

編集2

問題はメールとは関係がないと判断し、ルールを再作成してみましたが、HTMLメールを送信するのではなく、ページに出力を送信しました。このルールが2回実行されることが確認されましたメッセージも2回出力されたという事実。

[〜#〜]更新[〜#〜]

Molotが指摘したように、これは電子メールとは関係ありません。ルールが2回発生するだけです。確認時にメールを送信しようとしている誰かが私と同じ結論に達した場合に備えて、上記のテキストを残しておきます。そうすれば、彼らがこれを見つけて何が起こっているのかを理解できます。

2
Andrew Morris

何が起こっているのかを理解する

あなたの質問は、質問のバリエーション(重複ではなくIMO)のようです-- 「既存のユーザーアカウントを更新した後」のイベントに2回起動するイベントに反応する私のルールはなぜですか? '。その質問で受け入れられた回答は、問題(原因)の理解にも役立つ可能性があります。

他のいくつかのモジュールコードは、user_savehook_user_updateを呼び出して、ルールイベントを再度トリガーしています。

これをデバッグする場合は、提供されたすべてのモジュール(「ルール」と「エンティティーAPI」を除く)を無効にして、実際に提供されたモジュールかどうかを確認します(コアではないと思います)。そして、問題が再発するまで、提供されたモジュールを1つずつ再度有効にします。それが戻ってきたらすぐに、問題の原因となった寄付モジュールを特定し、可能な解決策に取り組み始めることができます。

回避策1

その質問には 別の答え もあり、非常に興味深い回避策があり、画像は次のようになります(画像は1000ワード以上の価値があります)。

enter image description here

回避策2

この問題が発生しないようにする別の回避策は、既存のルールを改善して、- my answer に含まれるルールと同様にすることです。 " [account:last -login] =いいえ? "。すなわち:

  • 次のようなルール条件を追加します:ユーザーはロールID = "4"のロールを持っていません(!!!).
  • 次のようなルールアクションを追加します。ユーザーにロールID = "4"のロールを付与します。

したがって、このルールの改善により、ユーザーに役割ID = "4"の(指定された)役割がまだないかどうかが確認されます(ケースに適合する任意の役割IDに適応し、この役割がまだないことを確認してください)新しいユーザーIDをアクティブにするときに付与されます)。その場合、ユーザーにはそのロールが付与されます。既存のルールに対するこの改善により、次のことが起こります。

  • 初回ルールアクションは引き続き実行されます(指定されたロールを付与します)。
  • 2回目すべてのルール条件が満たされるわけではなく(指定されたロールが以前に付与されているため)、そのためルールアクションは実行されなくなります。

言い換えると、「これにより、ルールアクションが2回発生するのを防ぎます "(質問のように)。

1
Pierre.Vriens