web-dev-qa-db-ja.com

ルールモジュールを使用して、参照ポイントユーザーにuserpointsを付与する方法

Drupalで紹介プログラムを作成しています。ユーザーポイントをユーザーに付与する以外は、ほぼすべてが正しく機能しています。サイトを紹介した人が有料会員になったユーザーにポイントを付与したい。 Rules で何度か試しましたが、成功しませんでした。

私はこれらのモジュールを使用しています:

私が欲しいのは、ユーザーがサイトを参照する人がサイトの有料メンバーになると、ユーザーに自動的にユーザーポイントを与える Rules を使用してルールを作成することです。

ここで私を助けることができるより良い知識を持つ人?

5
marveangel

参照するユーザーのuidを収集するフィールドをユーザー登録フォームに追加します。次に、現在のユーザーに、ユーザー登録フォームへのカスタムURLを使用して他のユーザーをサイトに招待するよう依頼します。このURLには、照会パラメーターとして参照ユーザーのuidを含める必要があります。ユーザー登録フォームをフックし、クエリパラメータに基づいて参照元のuidを入力します。リファラーフィールドは完全に非表示にする必要があります。次に、特定のuidが招待した有料ユーザーの数をデータベースでカウントします。各ユーザーに関するリファラーuidはカスタムユーザープロファイルフィールドに保持され、ユーザーが有料メンバーになった場合に状況に応じて有効になります。

3
W.M.

パート1-説明

これはあなたがあなた自身のコメントで書いたものの一部です(今の質問の下):

Event:ユーザーがメンバーになった後

条件:ユーザーが別のユーザーによって参照されました

Action:ユーザーにポイントを付与します(ここで問題が発生します...データセレクターから 'referring-user'が見つかりません)

機能のリクエストを参照してください(バグではありません...) " ルールアクション:参照ユーザーのフェッチ "。

紹介のルール統合には、これをネイティブに行う方法がありません。「referring_user」変数は、新しいアカウントが作成されているときにのみ存在します。参照するユーザーを取得できるルールアクションがあると非常に便利です。

この問題のステータスは「レビューが必要」であり、機能させるためのパッチがあります。

パート2-すぐに使える代替手段

以下は、質問に部分的に回答するためにプロトタイプとして使用できる( Rules エクスポート形式)のルールです。

{ "rules_award_userpoints_to_referring_users" : {
    "LABEL" : "Award userpoints to referring users",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "userpoints_rules", "referral" ],
    "ON" : { "referral_recorded" : [] },
    "DO" : [
      { "userpoints_action_grant_points" : {
          "user" : [ "referring-user" ],
          "points" : "50",
          "tid" : "0",
          "entity" : [ "new-user" ],
          "description" : "You earned some points because user [referring-user:name] just registered using referral link [referring-user:referral-link].",
          "operation" : "New referral occured",
          "display" : "1",
          "moderate" : "default"
        }
      }
    ]
  }
}

50ポイントの(任意の)金額を選択しました。自分の要件に合わせて調整すると、新しいアカウントが作成されたときにこれらのポイントが(すでに)報われます(メンバーになることについての関係や依存関係はありません)。

ルールとユーザーポイントの統合には、利用できる機能がはるかに多いことに注意してください(そのため、このサンプルルールはプロトタイプとしてのみ検討しています)。

これらのモジュールを最初に有効にした場合(にも示されているように)、ルールUIを使用して上記の(エクスポートされた)ルールのインポートを実行できるはずです[〜#〜]要件[〜 #〜]上記のエクスポートされたルールのセクション):

  • Rules 、およびルールUIサブモジュール。必要に応じてこのルールをさらに調整します。
  • ユーザーポイント 、およびそのサブモジュール「ユーザーポイントルール統合」。
  • ユーザー紹介 ...もちろん...

パート3-ゴールデンクレードルに向かう

ユーザーアカウントにエンティティ参照フィールドを追加する場合(エンティティタイプ=ユーザーの場合)、「参照元ユーザー」への参照を追加することで、パート2のルールアクションを置き換えることができます(まだそれらのユーザーポイントを付与していません)。

次に、「新しいメンバーシップを保存した後」などのイベントに基づいて追加のルールを作成できます(これは Membership Entity モジュールから取得されます)。また、そのルールにルール条件を追加して、membership-entity:typeに関するデータ比較を実行し、ユーザーポイントを付与するメンバーシップタイプと一致するかどうかを確認することもできます。

最後に、パート2のルールアクションと同様に、ルールアクションを使用してユーザーポイントを付与できますが、referring-user(パート2のルールアクション内)は、指定されたユーザー参照を介して指定されたユーザーに置き換えられますユーザープロファイル。

Rules に慣れていない(十分/まだ)場合は、32(!!!)の無料の無料ビデオチュートリアル Learn the Rules framework をチェックしてください。

2
Pierre.Vriens

あなたの質問に従って、ユーザーにポイントを割り当てる以外のすべてを管理しました。次に、カスタムphpコードを実行するルールを作成することをお勧めします。ユーザーにポイントを割り当てるためのコードは次のとおりです。 (必要に応じて必要な変更を行ってください。)

$params = array(
    'uid' => $user->uid,
    'moderate' => 0,
    'points' => 15,
    'tid' => 0,
    'entity_id' => $user->uid,
    'entity_type' => 'user',
    'operation' => 'Vote Added',
);

userpoints_userpointsapi($params);
0
Rakesh Nimje