web-dev-qa-db-ja.com

ルール条件で現在の獲得ユーザーポイントにアクセスするにはどうすればよいですか?

Rules から[points]フィールドまたは任意のuserpointsフィールド( ser points module)にアクセスできません。

有効にしました:ルール、スケジュールされたルール、Rules_ui、Userpoints、Userponints_rules_integration、Userpoints_role(userpoints_contribから)、

クリアキャッシュとcronを間に挟んで言及されているモジュールを1つずつ数回、アンインストール/インストールを実行しましたが、userponitsフィールドへのアクセスはありません。

私のイベントはRules Conditionsで、「コンテンツを保存する前」です "User has a role-->auth-user "、ルール条件にもあります" content is of type-->My custom contentype "の順序で(結果を出さずに順序を変更しました)。

ノードを保存する前(推奨)または保存した後に、userponitsフィールドの値を更新する必要があります。

要素 "User has a role-->auth-user "、同じこと:Userpointsフィールドにアクセスできません

私は別のルールを適用し、ルールイベントに反応します。「新しいユーザーアカウントを保存した後」であり、YESこれらのフィールドにアクセスできます。

何か案は?参照モジュール?現在のユーザーをロードするために、テンプレートファイルにフックを実装する必要がありますか?カスタムモジュールが必要ですか?ルールに関するすべてのnode.oneスクリーンキャストを何度か見ました。そして、私はここで多くの投稿を読みました、そして(考えて)私はすべてを正しく行いましたが、成功しませんでした。

助言がありますか?

あなたの提案がある場合:フックまたはモジュール(私は熟練したプログラマーではありません)内のいくつかのコードを提出してください。

2
pinueve

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

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

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

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

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

ユーザーがノード(=ルールイベント、必要なルールイベントに変更できる)の更新を実行した後、ユーザーの現在の合計ユーザーポイントに関するメッセージを表示する基本的な例を次に示します。

{ "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を使用して上記のルールを自分のサイトにインポートします。

1
Pierre.Vriens