web-dev-qa-db-ja.com

「合計ユーザーポイント」が増加したときにユーザーバッジを変更するにはどうすればよいですか?

Drupal 7、そして ユーザーポイント モジュールと ユーザーバッジ モジュールを使用して、コミュニティサイトを構築しています。

私の目標は、すべてのユーザーが常に1つだけのバッジを持ち、それがWebサイト上のどこにいても、ユーザーの名前の近くに表示されることです。

これらは、ユーザーポイントの量に応じて選択されるバッジの仕様です。

  • 0-50ポイント=最初のバッジ
  • 51-100ポイント= 2番目のバッジ
  • 101〜200ポイント= 3番目のバッジ
  • 201-300ポイント= Forthバッジ
  • 301ポイント以上= 5番目のバッジ

私は ser Points Contributed modules を使用しようとしましたが、残念ながらDrupal 7アップグレードはありません。

Rules モジュールを使用してみましたが、ユーザーの現在の合計ポイント数を自分と比較する方法が見つかりませんでした仕様、(ルールイベント「ユーザーにはポイントが付与されました」)、その比較の結果に基づいて、ルールアクションにより、最終的にユーザーに割り当てられたバッジが変更されます。

これを機能させるための提案はありますか?

5
EB84

あなたの質問の重要な部分はこれであるようです:

Rules モジュールを使用してみましたが、ユーザーの現在の合計ポイント数を自分と比較する方法が見つかりませんでした仕様、(ルールイベント「ユーザーにはポイントが付与されました」)、その比較の結果に基づいて、ルールアクションにより、最終的にユーザーに割り当てられたバッジが変更されます。

実際、Drupal 7の場合、ユーザーの現在の合計ユーザーポイントに関連するルール条件はないようです。カスタムPHPこの例のようなコード(ルール条件で使用できますnカスタムPHP code条件を実行します。たとえば、ある種の比較を行うため):

global $user;
$current_points = userpoints_get_current_points($user->uid, 'all');
if ($current_points < 0) {return TRUE;}

ただし、「Load user points of a user」というルールアクションがありますが、特定のカテゴリ、またはすべてのカテゴリをまとめて。このルールアクションは、要求されたカテゴリのユーザーポイントの量を含むルール変数(名前と説明を指定できます)を提供します。その後、この変数を後続のルールアクションで使用できます。

その後、ルール条件内でその変数を使用する場合、次の2つの方法があります。

  • ルールコンポーネントに条件を含めますが、「ユーザーのユーザーポイントの読み込み」に続くルールアクションを介してそのルールコンポーネントの実行をトリガーします(ユーザーコンポーネントの量を含む変数をルールコンポーネントの変数として渡します)。 。
  • 条件付きルール モジュールを使用して、ルールアクション内でルール条件を指定できるようにします。

これは、ユーザーがノード(=ルールイベント)の更新を実行した後、ユーザーの現在の合計ユーザーポイントに関するメッセージを表示する基本的な例です。あなたの質問のように、ポイントが与えられました」:

{ "rules_display_userpoints_after_updating_content" : {
    "LABEL" : "Display userpoints after updating content",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "userpoints_rules", "rules" ],
    "ON" : { "node_update" : [] },
    "DO" : [
      { "userpoints_rules_get_current_points" : {
          "USING" : { "user" : [ "site:current-user" ], "tid" : "all" },
          "PROVIDE" : { "loaded_points" : { "total_points" : "Number of points in all categories together" } }
        }
      },
      { "drupal_message" : { "message" : "You now have [total-points:value] points" } }
    ]
  }
}

必要に応じて、ルールUIを使用して上記のルールを自分のサイトにインポートします。

2
Pierre.Vriens