web-dev-qa-db-ja.com

すべてのユーザーに新しいフィールドコレクションアイテムを追加するようにスケジュールするにはどうすればよいですか?

私のユーザーには、「日付」と「ポイント」の2つのフィールドを持つ「スコア」と呼ばれるフィールドコレクションがあります。 1日の終わりに、現在の日付を「日付」、現在のユーザーポイントを「ポイント」として、すべてのユーザーの新しいフィールドコレクションアイテムを追加したいと思います。

スケジュールされたルールを使用することを考えましたが、「すべてのユーザー」のようなものを選択する方法がわかりません。これは ルール で可能ですか、それともこれを達成する別の方法がありますか?


この質問は プロファイルページの合計ユーザーポイントの折れ線グラフを作成する方法 の一部です。

1
Jeroen

はい、これは Rules で可能です。 Views Bulk Operations と組み合わせると、以下でさらに詳しく説明します...

実際に行う必要があるのは、 VBOを使用してオブジェクトのリストをルールにロードする についてのビデオに示されているものと同様です。5:30頃から11:30までです。このビデオに表示されている内容の概要は次のとおりです(リンク先のページからの引用)。

  • ルールで作業するエンティティを一覧表示するビューが必要です。ビューを表示する必要はないことに注意してください。ビューをどこかに表示したくない場合は、表示しない方がよい場合もあります。
  • ただし、1つの一括操作フィールドが必要です。一括操作のタイプフィールドは、ルールに送信されるエンティティタイプを決定します。フィールドに対してアクションを有効にする必要はないことに注意してください。アクションが存在するだけで十分です。
  • アクションとして、VBOからエンティティをロードするルールが必要です。 (これは、[ビューの一括操作]グループで使用できます。)少なくとも1つのVBOフィールドを持つすべてのビュー表示を選択できます。
  • このアクションは、ルールの他のリストと同じように使用できるエンティティのリストを提供します。ループ、アクション、ルールスケジューラと組み合わせて、素晴らしいものを実現します。

あなたの場合、処理したいすべてのユーザーのVBOリストから始めたいと思います。また、リスト内のユーザーごとに、ルールのアクションを「スケジュールされたルール」のようにします。そのルールが実際に実行することになっているものは何でも(「スティッキーを削除」ではなく)。

そのビデオでも7:30頃に示されているのと同様に、ユーザーIDもパラメーターとして渡します。

上記のように作成したルールコンポーネントは、11:30からビデオに示されているのと同様に、ルールスケジューラを介して毎日トリガーされるルールによって実行されるアクションになります。

他のルールの「条件」が必要な場合(例:選択したロールのみ)、作成したルールコンポーネントにそれらを追加できます。

簡単ですよね? Happy [〜#〜] vbo [〜#〜] -ing with Rules ...(または Rules -ing with [〜#〜] vbo [〜#〜] 必要に応じて)!

1
Pierre.Vriens

ルールについてはよくわかりませんが、小さなコードを使用してカスタムモジュールでそれを行うことができます。

$uids = db_query("SELECT uid FROM {users} WHERE status=1")->fetchCol();
$accounts = user_load_multiple($uids);
foreach($accounts as $account) {
    $edit['my_field'][LANGUAGE_NONE]['0']['value'] = 'my new value';
    user_save($account, $edit);
}
1
Felix Eve