web-dev-qa-db-ja.com

ユーザーごとにノードを既読としてマークするにはどうすればよいですか?

ユーザーごとにノードを既読としてマークするのが最善の解決策だと思います。

以下のシナリオは私が達成しようとしているものです:

  1. 管理者は、読み取りと確認が必要なノードを作成し、ユーザーにフラグを設定しますa+b
  2. ユーザーa+bには、新しいコンテンツがあるため、読むことを要求するメールが届きます。
  3. ユーザーaはページに移動してコンテンツを読み取り、[これを読んだことを確認します]をクリックします。ユーザーaは元に戻せません。
  4. 管理者がページを表示すると、ユーザーaは読み取りを確認したが、ユーザーbはまだ確認していないことがわかります。

私の最初の最初の考えは FlagViews および Rules の組み合わせを使用することでした。

助言がありますか?

3
pacusi

(質問のように) FlagViews および Rules モジュールを使用することは、実際にこれを機能させる方法です。しかし、2(= a + b)を超えるユーザーがいる場合、 Views Bulk Operations(VBO) モジュールをこれに追加することもできます。詳細については、以下をお読みください...

  1. 管理者は、読み取りと確認が必要なノードを作成し、ユーザーa+bにフラグを立てます

Flag を使用して、ノードにフラグを付ける(1番目の)フラグを作成します。これは、最初に管理者が「user a+b "(ご質問のとおり)、以下で詳しく説明します。このフラグのラベルは次のようになります。

  • フラグを立てる:「未確認の確認」。
  • フラグを解除するには: "Confirmed"。

実際にユーザーa+bのフラグを設定するには(数十人いると想像してください...)、適切なビューを作成して( Views を使用)、そのようなユーザーa+bのリストを作成する必要があります。 Views一括操作(VBO) を使用してそのビューを変換し、そのVBOリストによって実行される「操作」がルールコンポーネント( Rulesで作成されたもの)を実行するようにします )。

方法がよくわからない場合は、 Using Rules components with VBO "に関するビデオをご覧ください。また、後続の" Using Rules "もご覧ください。複数のパラメータを持つコンポーネント "ビデオ。

このVBOリストで使用される実際のルールコンポーネントは、単一のユーザーがノードにフラグを立てるルールにすぎません。ここでのトリックは、フラグを立てるユーザーとして使用する値です。処理されているVBOリスト行に含まれているuidを使用する必要があります(VBOリストを使用する管理者である現在のuidではありません)。

  1. ユーザーa+bは、新しいコンテンツがあるため、読むことを要求するメールを受信します。

前のステップのルールコンポーネントを拡張(拡張)して、処理中の各ユーザーに電子メールを送信するという追加のアクションを追加します。電子メールの件名と本文をニーズに合わせて調整します。

  1. ユーザーaはページに移動してコンテンツを読み取り、[これを読んだことを確認します]をクリックします。ユーザーaは元に戻せません

Flag を使用して、次のようなこのフラグのラベルを持つ(2番目の)フラグを作成します。

  • フラグを立てる:「私はこれを読んだことを確認します」。
  • フラグをはずす:「私はすでにこれを読んでいることを確認しました」。

ユーザーaがこのページにアクセスするときに必要なのは、そのユーザーaが「私はこれを読んだことを確認しました」というリンクをクリックすることだけです。ユーザーaがフラグを立てた後、ユーザーaによってノードに設定された(1番目の)フラグを削除する必要があります(=フラグなし)。これは、次のような2番目のルールで実行できるものです。

  • ルールイベント=フラグ設定後(2番目のフラグ付き)。
  • ルールアクション= unflag(最初のフラグ付き))。

ただし、ユーザーがaにノードにフラグを設定した後(2番目のフラグを使用)、再度フラグを解除するためのリンクが表示されます。しかし、ユーザーaが再びフラグを解除できないようにする必要があります。これを防ぐには、3番目のルールを作成して、このようなフラグ解除の試みを禁止するか、そのような試みをキャプチャして自動的に再度フラグを立てます。別のアプローチとして、カスタムテンプレートを使用する方法があります。これにより、フラグを解除するリンクが非表示になります。

  1. 管理者がページを表示すると、ユーザーaは読み取りを確認したが、ユーザーbはまだ確認していないことがわかります。

Views ブロックを作成して、フラグが付けられていないすべてのユーザーをリストしますノードもう最初のフラグを付けます(これらはa)。そして、まだフラグが付けられているすべてのユーザーをリストする同様のブロック最初のフラグを持つノード(これらはbのようなユーザーです)。

:上記のアプローチは完全にエンティティベースであり、 Legal モジュールによって提供される機能の一部の可能な代替案と見なされる場合があります(質問は同様のものである可能性があります)機能性)。

3
Pierre.Vriens

これは別の方法ですが、特定のコンテンツタイプのすべてのコンテンツで、すべての新しいコンテンツを既読にする必要がある場合にさらに役立ちます。

Webform モジュールを使用する場合、 Webform Default Fields を使用して、そのコンテンツタイプのすべてのインスタンスにデフォルトフォームを割り当てることができます。その後、各ノードは一意のWebフォームになります(ノードタイトルを引き継ぐ)。これにより、フォームごと、期間ごと、またはセッションごとに1つの送信を追加で示すことができます。また、ユーザー情報を簡単にダウンロードできます。 AJAXを利用しているため、ユーザーが単一の送信に制限されている場合、フォームは送信されると消えます。

コンテンツが変更され、もう一度読んでマークする必要がある場合(ユーザーごとに1回の送信に設定されている場合)、送信テーブルをクリアするとフォームが元に戻ります。

0
D N