web-dev-qa-db-ja.com

すべてのユーザーのユーザーポイントを定期的に設定します

毎月初めに、自分のサイトのメンバーのユーザーポイントをxに設定したいと思います。これのための最良の方法は何でしょうか?

私がこれまでに見つけた最も近いものはこれでした: http://drupal.org/node/54964

ただし、これにはいくつかの問題があります。1。ユニバーサルに5に設定するのではなく、5ポイントを追加します。2。whileループを使用するため、ユーザーが多い場合は時間がかかる可能性があります。

私はこれを一度に行う迅速で汚いUPDATESQLクエリを考えています。

1
giorgio79

ルールベースのソリューション。アクションは次のとおりです。

  1. ユーザーのロードポイント
  2. 変数を追加します:タイプ:整数、値:750
  3. 値を計算します:[変数追加]マイナス[ロードポイント]
  4. 計算値変数を使用してユーザーにポイントを付与します
0
joncjordan

質問は、リンクされた問題 http://drupal.org/node/54964 (コメント5-7)で私が回答しました。ここで回答を引用すると、簡単に見つけられ、質問に解決済みのマークを付けることができます。

ユーザーが持つポイントの量を固定量に設定することはできません。合計はすべてのトランザクションの要約にすぎません。トランザクションにはユーザーが現在持っている合計とは異なるものが表示されるため、対応するトランザクションなしで金額を設定すると、UIが非常に混乱するため、設定しないでください。

各ユーザーに対して行う必要があるのは、最初にユーザーが現在持っているポイント数を照会してから、不足しているポイント数を指定することです。

<?php
$points_to_give = 500 - userpoints_get_current_points($uid);
if ($points_to_give > 0) {
  // Grant points here.
}
?>
  • Cronの実行ごとに固定数のユーザーのみを処理し、すべてのユーザーを処理した後でのみ時間変数を保存します。これは、cronを呼び出す頻度によっては、すべてのユーザーがポイントを取得するまでに数時間かかる可能性があることを意味します。

  • Hook_crun()を使用しませんが、たとえば、カスタムスクリプトを作成し(たとえば、drushを使用して)、それを個別に呼び出します。または、バッチプロセスを開始するカスタムページコールバック。

フォローアップのコメントは、ユーザーが新しい月に初めてログインしたときに持っているポイントの数を修正するという代替ソリューションに関するものです。

0
Berdir