ユーザーとノードの両方で参照される2つの分類語彙(町とトピック)があります。ノードが作成されたら、ノードが直接(ユーザー参照フィールドを使用して)ユーザーに割り当てられている場合を除き、ノードで参照されている用語を参照しているすべてのユーザーにメールを送信する必要があります。
Subscriptions モジュールは、特定の用語を使用してすべての新しいノードをユーザーに通知するのに最適ですが、他のフィールド(私の場合はユーザーリファレンス)に基づいてノードを除外する方法を見つけることができません。
Rules を使用して、ユーザー参照なしで新しいノードが作成されたときに電子メールを送信できますが、受信者を「参照されている用語を使用するすべてのユーザー」として定義する方法がわかりません。新しいノード」。 [〜#〜] vbo [〜#〜] が答えかもしれませんが、ルールからビューを生成する方法がわかりません。
助言がありますか?ありがとう。
実際には、「プロパティによるエンティティのフェッチ」アクションを使用して、フィールド値に基づいてすべてのユーザー(または任意のエンティティ)をプルアップできます。
ユーザー(およびノード、コメントなど)はすべてエンティティであるため、このアクションを使用して、フィールドに特定の値を持つユーザーのリストをプルアップできます。
あなたのルールでは、それはノードの更新時に起動されます、単に
次に、このフェッチの後にアクションセットにループを追加して、見つかった各エンティティを調べます。このループでは、2番目のフィールドをチェックし、必要なフィールドを除外します。私が理解していることから、編集したノードのユーザー参照フィールドに一致するidを持つものを除外する必要があります。
だからここに方法があります:
これで、ルールのアクションセットは次のようになります。分類プロパティでユーザーをフェッチし、見つかったすべてのエントリをループします(デフォルトで10に制限されているため、必要な数だけプルしていることを確認してください)。ところで)。
次に、ルールにコンポーネントを追加します。コンポーネントは、アクション領域で実行するまったく新しいルールが必要な場合に使用されます。ユーザーをループしているので、呼び出す新しいルールが必要です(ユーザーにフィールドxがない場合は、yを実行してください)。ただし、アクション領域にいるときは、条件を呼び出すことはできません。そのため、それ自体がルールであるコンポーネントを作成し、ここから呼び出します。
-コンポーネントのアクションとして、システムに必要なメールを送信させる
出来上がり!ほぼ完了しました。このコンポーネントは、ループされたユーザーを(正しい用語で)参照されていないユーザーに絞り込み、電子メールで送信します。残すべきことの1つは、このコンポーネントをユーザーループで呼び出すことです。
元のルールに戻り、「アクションの追加」をクリックしますループへ(その下ではなく、その上)
アクションのリストの一番下に、作成したコンポーネントの名前が表示されます。新しいコンポーネントがそこにあるはずです。それを選択し、更新されたノードと 'fetched_entity'(現在ループしているユーザー)を2つのパラメーターとして渡します。
テスト!
お役に立てれば。
カスタムモジュールで、独自のカスタムルールアクションを作成するには、hook_rules_action_info()を使用します。 http://drupalcontrib.org/api/drupal/contributions!rules!rules.api.php/function/hook_rules_action_info/7
このアクションにより、電子メールアドレスのリストが提供されます。次に、ルールでこのリストをループして、それぞれにメッセージを送信できます。
アクションは次のようになります。
function mymodule_rules_action_info() {
return array(
'mymodule_get_user_emails' => array(
'label' => t('Get user emails'),
'parameter' => array(
'term' => array(
'label' => t('Term'),
'type' => 'taxonomy_term',
),
),
'provides' => array(
'emails' => array(
'label' => t('List of Emails'),
'type' => 'list<text>',
)
),
'group' => t('My Module'),
),
);
}
function mymodule_get_user_emails($term) {
// Do stuff here to get your list of emails based on the term.
// $emails would be an array.
return array('emails' => $emails);
}