web-dev-qa-db-ja.com

ユーザーが特定のタイプの最初のコンテンツを送信したことを知る方法は?

私は Rules モジュールを使用して、ユーザーがいつログインしたかを知り、ユーザーに自分のログインイベントを通知しました。

ここで、ユーザーが特定のタイプのコンテンツを初めて送信したときを確認したいので、ユーザーが特定のコンテンツタイプの最初のコンテンツを送信したときを理解できます。

ルールのルールを変更してこれを実装するにはどうすればよいですか?

5
Mohammad LoM

与えられた答えはうまくいきますが、通常、目的を達成するためのさまざまな方法があります。1つの解決策は、 ViewsViews Bulk Operations(VBO) の組み合わせの使用です。それを達成するためのモジュール

  • 目的のタイプのノードを含むビューを作成します
  • コンテキストフィルターを追加し、ログインユーザーが書き込んだノードに結果を制限します
  • vBOビューモードを追加する
  • ルールではVBOアイテムをロードできます( 確認方法
  • 配列が空の場合、作成されたノードは、ユーザーが送信したそのタイプの最初のノードになります

ルールを使用してすべてのジョブを実行することもできます。多くのコンテンツタイプでこの機能を使用したくない場合は、ブール値フィールドをユーザーのアカウントに追加できます。デフォルト値は 'False 'ユーザーが目的のタイプの最初のコンテンツを書き込んだかどうかを示し、ノード送信イベントでこのフィールドをチェックして、この投稿がそのタイプの彼/彼女の最初の投稿であるかどうかを確認できます。目的のタイプの最初のコンテンツを送信した後、このフィールドをTrueに設定することを忘れないでください。

上記のアプローチは、一度計算して何度も使用するため、クエリを必要としない処理原因をいくつか節約します。

また、条件node.uid == user->uidおよびnode.type == "TYPE_MACHINE_NAME"を使用してノードテーブルに対するクエリを含むカスタムルールイベント( [〜#〜] api [〜#〜] )を書き込むこともできます。クエリが空でない場合は、ユーザーがそのタイプのコンテンツを既に送信していることを意味します。 Falseを返します。

追加のモジュールを必要としない別のソリューションは、専用のロールを作成することです。そのロールを "Contributor"と呼びましょう(適切なロールを使用してください)。

次に、次のような基本的なルールを作成します。

  • ルールイベント:新しいコンテンツを保存した後。
  • ルール条件(両方を満たす必要があります):
    • 送信されたコンテンツには、特定のタイプと一致するタイプがあります。
    • 現在のユーザーにはまだロール "投稿者"がありません。
  • ルールアクション= "Contributor"ロールをノードの作成者に割り当てます。

上記を設定したら、既存のルールを改善して...推測したかどうかを確認します...ユーザーにロール "投稿者"があるかどうかを確認します。

4
Pierre.Vriens

Flag モジュールを使用して、ユーザーが要件に一致するコンテンツを最初に送信したときにフラグを立てます。このようなユーザーにフラグを付けるには、次のような基本的なルールを作成します。

  • ルールイベント:新しいコンテンツを保存した後。
  • ルール条件:該当するものがある場合は、そのすべて。
  • ルールアクション=ユーザーにフラグを立てます。

上記を設定したら、既存のルールを改善して、ユーザーにフラグが立てられているかどうかを確認します。

3
Pierre.Vriens