web-dev-qa-db-ja.com

ユーザーの最終投稿日を保存するルールと30日間のリマインダーに基づくスケジュールされたルール

このシナリオでは、ユーザーは30日ごとに特定のコンテンツタイプの1つのノードを投稿できます(ユーザーの役割に応じて間隔が変わります)。これを実現するためにnode_limitを使用しています。それはルールとは関係ありません。

したがって、アイデアは、30日後にユーザーに新しい記事を投稿するよう通知する電子メールをスケジュールし、ユーザーのアカウントのフィールドを更新して、ユーザーが最後に投稿した時刻を表示することです。ノードが保存されると、ルールはユーザーフィールドをノードの投稿日で更新する必要があります。

しかし、データ値の設定を正しく構成できません。

私が作成したルールは次のとおりです。

プロパティごとにエンティティを取得パラメータ:エンティティタイプ:ユーザー、プロパティ:press_update_last_posted、値:[node:created]変数を提供:日付(entity_fetched_pressupdatelastposted)

データ値を設定パラメータ:データ:[エンティティフェッチ] ...、値:[エンティティフェッチ] ...

そしてもちろん、スケジュールされた電子メールを起動して、サイトにメッセージを表示します。

助言がありますか?

2
Sam Roy

以下の3つのステップで説明するように、_ Rules モジュールをRules Scheduler(そのサブモジュール)とともに使用します。これらのステップはこれらの仮定に基づいています:

  • コンテンツタイプ=記事。
  • 30日間隔。

この場合、ユーザープロファイルに日付フィールドが追加されるので、ユーザーごとに「次の記事」の適切な日付を示すことができます。

ステップ1:「次の記事」の日付を格納するフィールドを作成する

マシン名(たとえば)field_next_articleを使用して、「user」エンティティにフィールドを追加します。 1つの日付のみを許可します(「次の」記事が許可されるときに保管するため)。

ステップ2:ルール「コンポーネント」を作成する

作成するルールComponentは次のとおりです(ルールエクスポート形式で、コピーと貼り付けを介して独自の環境にインポートするだけです):

{ "rules_send_email_notification" : {
    "LABEL" : "Send eMail notification",
    "PLUGIN" : "action set",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "USES VARIABLES" : { "user_to_notify" : { "label" : "User to be notified", "type" : "user" } },
    "ACTION SET" : [
      { "mail" : {
          "to" : [ "user-to-notify:mail" ],
          "subject" : "Friendly reminder about your next article",
          "message" : "This is a reminder about your next article on [user-to-notify:field_next_article] ...",
          "from" : "[site:mail]",
          "language" : [ "" ]
        }
      }
    ]
  }
}

明らかに、Subjectおよびメールの内容はレビュー/チューニングが必要な場合がありますが、他のを使用することもできますFrom電子メールID。

ステップ3:ルールコンポーネントを使用して「ルール」を作成する

作成するRuleRules エクスポート形式で示します(コピーして貼り付けて独自の環境にインポートするだけです)。 :

{ "rules_user_reminder_after_30_days" : {
"LABEL" : "User Reminder After 30 Days",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "rules_scheduler" ],
"ON" : { "user_login" : [], "node_insert--article" : { "bundle" : "article" } },
"IF" : [
  { "entity_has_field" : { "entity" : [ "account" ], "field" : "field_next_article" } }
],
"DO" : [
  { "schedule_delete" : {
      "component" : "rules_send_email_notification",
      "task" : "[account:name]"
    }
  },
  { "data_set" : { "data" : [ "account:field-next-article" ], "value" : "+30 day" } },
  { "schedule" : {
      "component" : "rules_send_email_notification",
      "date" : {
        "select" : "account:field-next-article",
        "date_offset" : { "value" : 2592000 }
      },
      "identifier" : "[account:name]",
      "param_user_to_notify" : [ "account" ]
    }
  }
]

}}

上記のルールは、前のステップのRules Componentを参照していることに注意してください。

このルールの一部であるschedule_deleteは、データフィールドを更新するときに、以前に「スケジュールされた」リマインダーが確実に削除されるようにするためです(これにより、リマインダーが1つだけトリガーされ、最新の日付でトリガーされます)。

2
Pierre.Vriens