web-dev-qa-db-ja.com

オーガニックグループの投稿にFacebookスタイルの通知を実装する方法

私はオーガニックグループを使用しています、Drupalコモンズ。誰かがグループで投稿した場合、すべてのメンバーにFacebookのように通知の数を通知する必要があります。このスクリーンプリントと同様に:

enter image description here

どうすればそれを達成できますか?

注記

  • 投稿とは、オーガニックグループ内のPostコンテンツタイプ(デフォルト)の新しいノードの作成(およびコメント部分は現在必要ありません)。
  • 私はこれにルールを実装していません。ルールを使用してこれをどのように達成できるか説明できますか?
2
FAB

以下は、これを機能させる方法の青写真です。答えとしてマニュアルを書くことを避け、自分自身を繰り返すのを避けるために、他の答えへのリンクをいくつか使用します(それらすべてが私のものではありません...)。

ステップ1:ルールを関与させる

Rules モジュールを使用して、いくつかのOrganicグループに属する、作成中の新しいノードに関するイベントをキャプチャします。 「[] send an eMail」の2つの可能な選択肢について、「 ルールでオーガニックグループ名を取得しますか? 」のいずれかの回答を確認してください。グループの各メンバーに。

これで、あとで詳しく説明するように、「電子メールを送信する」ルールアクションを通知の数を表示するもの(質問のように)に置き換えるだけです。

ステップ2:メッセージを使用して通知エンティティを作成する

Message モジュールもインストール/有効化します。前のステップのルールアクションを「電子メールを送信」するルールアクションに置き換えて、メッセージ「エンティティ」を作成します(これは Message モジュールを使用した場合に得られるものです)。そして Views の機能を使用して、後でそれらのメッセージを表示します(しばらくお待ちください:光沢のある通知ボタンのような形式で...)。

必要なものの概要は次のとおりです。

  1. Message モジュールを使用して、適切なメッセージタイプを定義します。メッセージタイプは、ノードのようなメッセージの作成に使用される「コンテンツタイプ」と同様に考えてください。

  2. (「メッセージ」タイプの)ルールアクション「エンティティの作成」でルールを拡張します。いくつかの例については、 メッセージタイプを設定するためのルールを作成するために使用できるユーザー関連のトークンはどれですか? の回答を参照してください。

  3. Rules を介して、関連するトークンを置換トークンとして渡して、メッセージで使用できるルールアクションを追加することもできます。 Message モジュールで作成したタイプ。詳細については、 メッセージタイプの「置換トークン」の目的は何ですか? を参照してください。

  4. Views を使用して、作成したメッセージを好みの形式で表示します。

ステップ3:通知アイコンのビューを変換する

メニューバッジ モジュールを使用して、メニュー項目および/またはメニュータブにこのような通知を追加できます。あなたの選択。以下に、その詳細(プロジェクトページから)を示します。

メニュー項目にiOSスタイルのバッジを追加する方法を提供します。 (スクリーンショットを参照)

enter image description here

メニューへのバッジの追加

有効にしたら、Administration > Structure > Menusに移動し、ターゲットアイテムを含むメニューの横にある[リンクをリスト]をクリックします。アイテムの横にある[編集]をクリックし、[メニューを表示]バッジ選択ボックスで表示するバッジを選択します。

タブへのバッジの追加

メニュータブにバッジを追加するために、Administration > Structure > Menusの下に「タブメニューバッジ」というタブがあります。変更するタブのメニュールーターパスを検索し、対応する選択ボックスからバッジを選択します。

バッジのタイプ

モジュールには5つのサンプルバッジが含まれており、新しいバッジは Views で簡単に作成できます。モジュールは、フック実装を使用して独自のバッジを提供することもできます。詳細は README.txt ファイルを参照してください。

Views モジュールとの統合方法により、基本的には、あらゆる種類の通知に対するソリューションを次のようなものに削減します。

  1. 適切なビューを作成し、そのビューのメニュー項目またはメニュータブを作成するだけです。明らかに、ステップ2で作成したビューは、使用したいビューです。
  2. 15秒 Menu Badges 設定を行って、ビューで使用したメニュー項目/タブを通知します。

ビデオチュートリアル

ステップ4:通知アイコンを更新する

上記の手順を完了すると、関連するメッセージに対応する光沢のある通知アイコンが表示されます。あとで説明するように、残っているのは、アイコン(つまり、そこに表示されているカウンター)を更新するための実装です。

オプション1 -メッセージを管理可能にします

このオプションにより、ユーザーは既読のメッセージと新着のメッセージ(=未読)を示すことができます。そのためには、「 ユーザーが自分のメッセージスタックメッセージを管理できるようにする方法 」で説明されている手順を実行するだけで、次のように要約できます。

  1. フラグを作成します( Flag モジュールを使用)。
  2. ビュー「ユーザー別メッセージ」(=上記のビュー仕様の改良版)を作成します。
  3. Rules を使用して、メッセージにフラグを立てたり、フラグをはずしたりします。
  4. ルールコンポーネントをトリガーしてメッセージにマークを付けます( [〜#〜] vbo [〜#〜] モジュールを使用)。
  5. 未読メッセージに関する通知を作成します( " Menu Badges "モジュールを使用)。そのため、新しいメッセージが作成されるたびに、未読メッセージの数を含むiOSのような(赤い)バッジの形式で通知がユーザーに届きます。

オプション2 -パスにアクセスした後、通知アイコンを削除します

このオプションでは、ユーザーが専用パスにアクセスしてすべてのメッセージを表示した後、通知アイコンが完全に削除されます。方法の詳細については、「 ページが表示された後にメニューバッジを非表示にする方法 」の回答を参照してください。

1
Pierre.Vriens

FAB、この回答はしばらくの間終了しませんが、ピエールの回答に追加すると、FB機能に近づくことができます。

ピエール、ルールリンクに慣れていると思います。

CSSで非表示にできる以下のようなJSトグルを出力します。

<div class="rules-link-wrapper rules-link-messages_seen">
  <a href="/seen/1234/_Rr4IZddvsd5kl8VtuNUqFyHPUHQ3LAepC-I1WzujWg" class="rules-link rules-link-js rules-link jquery-once-1-processed" rel="nofollow" title="Seen">Seen</a>
<span class="rules-link-message" style="display: none;">Link executed</span></div>

メニュー項目にクラス.menu_unreadがあり、バッジが.badge_unreadである場合、次のようにしてVBOルールを起動できます。

  $('.menu_unread').click( function () {
              // Get the url from the JS link
              var rules_link_url = $('.rules-link-messages_seen a').attr('href');
              $.ajax({
              type: 'POST',
              url: rules_link_url,
              dataType: 'json',
              success: function () { 
              // Hide Badge.. Or you could fake set it to zero
                    $('.badge_unread').hide();
                    //So the rule fires once only
                    $(' menu Identifier ').removeClass('menu_unread');
                }
              });
        });

これはフラグトグルでも機能しますが、デフォルトの動作のようにすぐにフラグを解除できません。

なぜこれを行うのですか?任意の要素のクリックからルールを起動します。

1
Niall Murphy