web-dev-qa-db-ja.com

ユーザーポイントを投票用紙に変換する方法は?

次の機能を実現したいのですが、これが可能かどうか疑問に思っています。

購入するたびに、ユーザーポイントを獲得できます(これはルールを使用して処理できます)。

これらのユーザーポイントは、候補者の投票に使用されます。したがって、1000のユーザーポイントがある場合、候補Aに300、候補Bに500、候補Cに200を使用できます(1ユーザーポイント= 1投票)

私がこれをどのように実装できるかについてのヒント/提案を与えることができますか?ワークフローは次のようになります。

  1. 候補者を選びます。

  2. 投票額を「入力」します。

  3. 投票が記録されます。

  4. 投票額は私のユーザーポイントから差し引かれます。

1
rareglove99

ユーザーポイント モジュールと ルール モジュールの統合を使用して、ユーザーポイントをあるアカウントから別のアカウントに転送するカスタムルールを作成して、「独自のCookieをロール」します。

サンプルとして、ノードの投票と組み合わせて使用​​されるこのルールを見てください。一方、作成者は「-2」ポイントを失い、投票者は「-1」ポイントを失います。

{ "rules_votedown_question" : {
    "LABEL" : "votedown_question",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "TAGS" : [ "answers" ],
    "REQUIRES" : [ "rules", "voting_rules", "userpoints_rules" ],
    "ON" : { "voting_rules_insert_node" : [] },
    "IF" : [
      { "node_is_of_type" : {
          "node" : [ "node" ],
          "type" : { "value" : { "answers_question" : "answers_question" } }
        }
      },
      { "voting_rules_condition_check_vote_value" : { "vote" : [ "vote" ], "value" : "-1" } }
    ],
    "DO" : [
      { "userpoints_action_grant_points" : {
          "user" : [ "node:author" ],
          "points" : "-2",
          "tid" : "0",
          "entity" : [ "" ],
          "description" : "Receive downvote to [node:type-name] \u0022[node:title]\u0022",
          "operation" : "QuestionDownvoteReceived",
          "reference" : "By uid=[vote:uid], for [node:type-name] to q=\u003Ca href=\u0022\/node\/[node:nid]\u0022\u003E[node:title]\u003C\/a\u003E",
          "display" : "1",
          "moderate" : "default"
        }
      },
      { "userpoints_action_grant_points" : {
          "user" : [ "vote:user" ],
          "points" : "-1",
          "tid" : "0",
          "entity" : [ "" ],
          "description" : "Issue downvote to [node:type-name] \u0022[node:title]\u0022",
          "operation" : "QuestionDownvoteIssued",
          "reference" : "From uid=[node:author:uid], for [node:type-name] to q=\u003Ca href=\u0022\/node\/[node:nid]\u0022\u003E[node:title]\u003C\/a\u003E",
          "display" : "1",
          "moderate" : "default"
        }
      }
    ]
  }
}

ポイントの量(-2と-1)を(たとえば)+300と-300のようなものに単純に適応させると、あるユーザーから別のユーザー(たとえば候補A)に(300)ユーザーポイントを転送するプロトタイプができます。候補者BとCについて繰り返します。

Rulesイベントを「何かにフラグが立てられている」( Flag モジュールで作成)などのイベントに置き換えると、クリックするだけで「事前定義された(ハードコードされた)量のこのユーザーに対する私のユーザーポイント)これをさらに一歩進めることができます。フラグはフィールド化可能であるため、「移動」するポイントの量を示すフィールドを追加して、ユーザーが「300」を入力できるようにすることができます。候補者A(ハードコードされた固定金額の代わりに)。

ただし、上記のルールの例では、さらに改良が必要な場合があります。ポイントをユーザーAからユーザーBに移動した後、ユーザーAの残りのポイントが負にならないようにする場合。このような改良を実装する方法の詳細については、「 現在のユーザーポイントがルールモジュールでマイナスかどうかを確認する方法は? "」を参照してください。

PS:この質問はD7に関するものだと思います。

1
Pierre.Vriens

したがって、希望するワークフローに応じて。次の手順に従うことができます。

  1. 'selectcandidate'と 'inputvote'の2つのフィールドを持つdrupalフォームを作成します。

  2. 次に、入力投票<ユーザーポイントかどうかを確認します。

  3. また、フォーム送信で「はい」の場合は、投票を記録し、候補者ポイントを付与して、ログインしたユーザーから差し引きます。 form_rules を使用して、フォームの送信または検証時にルールをトリガーするか、 serpoints api を使用してポイントを付与または差し引くことができます。

  4. いいえの場合は、ユーザーに十分なポイントがないというメッセージを表示します。

0
nit3ch

まず、質問をもう少し詳しく説明する必要があると思います。そして、私があなたの質問を理解している限り、あなたは旗を使ってこれを行うことができます、あなたはユーザーに投票するためのいくつかの flag を提供し、旗が旗を立てたときに候補者が彼のポイントから投票を寄付するルールを設定することができますフラグが立てられます。それが役に立てば幸い

0
nit3ch