ホームページ  >  記事  >  バックエンド開発  >  PHPでサイトにプライベートメッセージ機能を実装する方法

PHPでサイトにプライベートメッセージ機能を実装する方法

藏色散人
藏色散人オリジナル
2021-09-10 10:28:593214ブラウズ

サイトにプライベート メッセージ機能を実装する

php メソッド: 1. POST リクエストのリクエスト本文を読み取ります; 2. サブモジュールを呼び出し、サイト全体またはユーザー グループに送信されるサイト メッセージを挿入します。に属しています; 3. 未読のサイトメッセージ数量を取得します; 4. messageId が現在のユーザーに属しているかどうかを確認します; 5. 一括削除を実現します。

PHPでサイトにプライベートメッセージ機能を実装する方法

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

php はどのように実現しますか?サイトのプライベートメッセージ機能?

サイト メッセージ デザインのアイデアと計画の PHP 実装

1. 背景

現在使用している操作と計画メンテナンス プラットフォーム ユーザーは通信する際、WeChat や電子メール通知に依存することが多く、製品全体として、運用およびメンテナンス プラットフォームには内部コミュニケーション (サイト内メッセージング) を実行できるサービスも必要です。

オンサイト メッセージのデザイン トーン

オンサイト メッセージのデザイン トーンは、次によって異なります。ユーザーがオンサイト メッセージをどのように使用するか:

  • ユーザーは、運用および保守プラットフォームのページに固執せず、メッセージ通知を待ってメッセージの内容を表示し、その後、目的のページにジャンプします。操作される。

  1. #言い換えれば、オンサイト メッセージは最初のエントリ ポイントではなく、オンサイト メッセージのリアルタイム性は重要ではありません。

  2. 多くのソーシャル ネットワーキング サイト (Facebook、Zhihu、Weibo など) とは異なり、ユーザーはソーシャル ネットワーキング サイトのメイン ページに留まり、常に新しいコンテンツを更新し、コンテンツをチェックします。新しいメッセージを同時に送信 (主に個人のプライベート メッセージ、他の人の返信などは、システム通知メッセージを確認することを目的としたものではありません)

  • ユーザーは、新しいメッセージを送信するかどうかを決定します。

  • 多数の電子メールがある場合、たとえば、ユーザーが現場で処理する必要がある作業指示書が複数ある場合は、電子メール通知に基づいて運用および保守プラットフォームにアクセスします。同時に、ユーザーは作業指示プラットフォームが提供する「My To Do」ページですべての作業を実行します。

  • メールを誤って削除し、操作対象のモジュールに直接入るメールリンクがない場合

  1. その後、「リンク/注文番号で指定したページに移動します」を要求することができます

  2. または関連するモジュールを直接検索します

上記の記述では、ユーザーは基本的にオンサイトメッセージを利用しないことになりますが、どのような状況でオンサイトメッセージを利用するのでしょうか?

  • #電子メールは送信せず、サイト全体の通知、編集操作、コメント操作など、サイト内のメッセージ通知のみを送信します。

  • 特定モジュールの場合 詳細な動作記録がない場合、サイト内メッセージの発生時刻を確認できます

現状は製品メッセージのみです通知、メッセージ表示は分類および集約されていません。将来追加される予定です。サイト全体の通知、メンション、いいね、コメント、その他の種類のサイト内メッセージを送信する場合は、種類ごとのメッセージの集約を考慮する必要があります。

2. 要件の説明

  1. サイト内メッセージは通常、次の 2 つの要件を解決する必要があります:

  • ユーザーからユーザーへのサイト内メッセージ、管理者からユーザーへのサイト内メッセージ、つまり 1 対 1 の送信

  • 管理者から複数のユーザー、ユーザー グループおよびサイト全体へのサイト内メッセージ: つまり、1 対多の送信

(サイト内メッセージもあります)

現在のニーズは次のとおりです:

1 管理者が複数のユーザーにサイト メッセージを送信

ユーザーの信頼性は検証されません

タイトルの長さとコンテンツの長さを制限します (それぞれ 45 バイトと 150 バイト、中国語の 15 文字と 50 文字に相当します)

受信者のピンインの長さを制限します (最大 50 バイトの長さ)

[推奨学習: 「

PHP ビデオ チュートリアル 」]

2 ユーザーは自分のサイト情報を表示できます

「すべて」をクリックします、既読、未読」フィルター

メッセージ ソースごとに分類: 作業指示書プラットフォーム、リソース管理、自動インストール、脆弱性プラットフォーム、障害プラットフォーム。 。 。

3 ユーザーはサイト メッセージを削除および一括削除できます

4 ユーザーはすべてのサイト メッセージを読み取り、一括読み取りし、既読としてマークすることができます

5運用保守プラットフォームページ上部のメッセージアイコン

  • は未読メッセージ数を表示し、99 を超える場合は 99

  • # と表示します##. マウスをその上に置くと、ドロップダウン メニュー ボックスが表示され、最新の 10 件の未読メッセージが表示されます (「時間」、「ソース」、「タイトル」を表示)
  • #ドロップダウン ボックスの下部には 2 つのボタンがあります: [詳細]、未読メッセージをさらに読み込む、[すべて表示] でサイトのメッセージ リスト ページにジャンプします (別のウィンドウを開くことをお勧めします)
  • ドロップダウン ボックスの未読メッセージをクリックすると、ボックスがポップアップ表示され、詳細が表示されます。その後、未読リストのレコードを削除し、データベース内で既読としてマークを付け、数値を減らします。メッセージ アイコン内の未読メッセージの数 (1 件分)
6 管理者ページ:

ユーザーの更新

メッセージの削除

統計

モジュールの追加

サイト メッセージ タイプの追加

サイト全体のメッセージの送信

#4. システム プロセス

サイト全体のメッセージを送信する

#POST リクエストのリクエスト本文を読む

  1. 検証の長さ

  2. #データベースへの挿入
  3. ##Return
  4. ##サイト メッセージのリストの取得
  5. サブモジュールを呼び出し、サイト全体または所属するユーザー グループに送信されるサイト メッセージを挿入します。
  6. #クエリ条件に従ってデータベース データを返す

サイト上の未読メッセージの数を取得する

  1. サブモジュールを呼び出し、サイト全体または所属するユーザー グループに送信するサイト メッセージを挿入します。

  2. 数量を返す

Batch read

  1. messageId が現在のユーザーに属しているかどうかを確認します

  2. inbox_message で read を 1 に設定しますtable を変更して update_time

All read

update inbox_message set “read”=1, “update_time”=now where “receiver_name”=currentUser() and “read” = 0

一括削除

  1. messageId が属するかどうかを確認する現在のユーザーに

  2. inbox_message テーブルで削除済みを 1 に設定し、update_time を変更します

##すべて削除

update inbox_message set “deleted”=1, “update_time”=now where “receiver_name”=currentUser() and “deleted” = 0

5. データベース設計

内部メッセージ コンテンツ テーブル

CREATE TABLE `inbox_message_text` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(128) NOT NULL DEFAULT '',
  `content` longtext NOT NULL,
  `create_time` datetime NOT NULL,
  `update_time` datetime NOT NULL,
  `send_type` tinyint(4) NOT NULL DEFAULT '0',
  `creator_name` varchar(255) NOT NULL DEFAULT '',
  `deleted` tinyint(4) NOT NULL DEFAULT '0',
  `module_id` bigint(20) NOT NULL,
  `link` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ソースに加えて、メッセージ (module_name) に加えて、内部メッセージ自体にも、セキュリティ メッセージ、アクティビティ メッセージ、サービス メッセージなどのメッセージ タイプ (message_type) と呼ばれる緯度の説明があります。各主要カテゴリ内で、アクティビティなどのサブカテゴリに分割できます。メッセージ - プロモーション活動

messages ソースとメッセージ タイプは直交することができます。つまり、作業指示プラットフォームはアクティブなメッセージを持つこともできます。メッセージ ソースはメッセージのタイプであることもできます。 「製品メッセージ」と呼ばれる

社内メッセージ送信フォーム

CREATE TABLE `inbox_message` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `message_text_id` bigint(20) NOT NULL,
  `receiver_name` varchar(255) NOT NULL DEFAULT '',
  `read` tinyint(4) NOT NULL DEFAULT '0',
  `deleted` tinyint(4) NOT NULL DEFAULT '0',
  `create_time` datetime NOT NULL,
  `update_time` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `inbox_message_receiver_name_deleted_read_id` (`receiver_name`,`deleted`,`read`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

メッセージ ソース フォーム

CREATE TABLE `inbox_module` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `code` varchar(128) NOT NULL DEFAULT '',
  `name` varchar(128) NOT NULL DEFAULT '',
  `create_time` datetime NOT NULL,
  `update_time` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

6. API 設計

サイト メッセージの送信: POST /v1/message

リクエスト本文 Content-Type: application/json

{
    "title": "工单审批",
    "content": "XXX提交了变更申请,请审批",
    "to": "sunzhongyuan,shenli,wangya",
    "module_name": "工单平台",
    "link": "xxx"
}
response

{
    "code": 200,
    "data": 32,
    "msg": "OK"
}

サイト メッセージのリストを取得します: GET /v1/message User-Id: xxx

http://127.0.0.1:10085/v1/message?query=message_text_id.module_id.name:xxx&limit=1
{
    "code": 200,
    "data": {
        "data": [
            {
                "id": 1,
                "message_text": {
                    "id": 1,
                    "title": "title 2",
                    "content": "content 2",
                    "create_time": "2018-01-12 11:13:48",
                    "update_time": "2018-01-12 11:13:48",
                    "send_type": 1,
                    "creator_name": "sysadmin",
                    "deleted": 0,
                    "link": "xxx",
                    "Messages": null,
                    "module": {
                        "id": 4,
                        "code": "secure",
                        "name": "xxx",
                        "create_time": "2018-01-11 15:38:01",
                        "update_time": "2018-01-11 15:38:01",
                        "MessageTexts": null
                    }
                },
                "receiver_name": "xxx",
                "read": 0,
                "deleted": 0,
                "create_time": "2018-01-12 11:13:48",
                "update_time": "2018-01-12 11:13:48"
            }
        ],
        "total": 2
    },
    "msg": "OK"
}

サイト メッセージの読み取りおよびバッチ読み取り: PUT /v1/read_messages/:messageIds

response

{
    "code": 200,
    "data": "OK",
    "msg": "OK"
}

すべて読み取り PUT:/v1/read_all_messages

応答 上記と同じ

#サイト メッセージの削除と一括削除: PUT /v1/delete_messages/:messageIds

response 同上

サイトメッセージをすべて削除: PUT /v1/delete_all_messages

response 同上

メッセージ ソース リストを取得します: GET /v1/module

#response

{
    "code": 200,
    "data": [
        {
            "id": 1,
            "code": "worksheet",
            "name": "工单平台",
            "create_time": "2018-01-11 15:21:38",
            "update_time": "2018-01-11 15:21:38",
            "MessageTexts": null
        },
        {
            "id": 2,
            "code": "cmdb",
            "name": "资源管理",
            "create_time": "2018-01-11 15:22:28",
            "update_time": "2018-01-11 15:22:28",
            "MessageTexts": null
        },
        ...
    ],
    "msg": "OK"
}

# 7. テストノート

1 サイトメッセージの送信

純粋なインターフェイス

  • 受信ユーザーは次のように区切られます。カンマが含まれており、信頼性は検証されません。

  • 受信ユーザーは長さチェック、50 バイトです。

  • タイトル コンテンツには長さチェックがあり、それぞれ 45 バイトと150 バイト

  • module_name はリストです。ここから 1 つ選択する必要があります

  • 2 他のインターフェイスはフロントエンド ページを通じてテストできます

8. 最適化

未読リストを太字で表示し、既読リストを太字で表示できます。通常のフォント

  • サイト上のメッセージを分類し、さまざまな緯度でラベルを付けると、フィルタリング、検索、ブロックに便利です

  • ユーザーは設定できます受信が許可されているサイト メッセージのメッセージ ソース

  • #管理者はサイト全体のメッセージを制御できます。すべてのサイト担当者とメッセージ属性は追加、削除、変更、確認できます。サイト メッセージを誰にも見られないようにキャンセルするなど。

  • 管理者は、サイト内で送信されたメッセージの数と、製品の使用状況、割合をカウントできます。読まれたメッセージの数、メッセージが読まれた時間、メッセージが読まれた方法 (クリックして開くか、バッチ操作) など。

  • 9. 重要な機能ポイントの設計

右上隅のアイコンの動作

1 アイコンをクリックすると、最新の N 件の未読メッセージが表示されます

[ドロップダウン ボックスを表示]

  • 最新 N 個の未読メッセージをリアルタイムで取得します

  • N は 5 ですから 10、特定の値はドロップダウン ボックスの高さ制限によって異なります

  • ##未読値が N 未満の場合、ドロップダウン ボックスはその高さに適応できます
  • 未読値のメッセージがない場合、「新しいメッセージはまだありません」と表示されます
  • 10 秒ごとの未読メッセージ数の取得を停止するインターフェイス
  • 2 ドロップダウン ボックスに、メッセージ ソース、時刻 (現在時刻からの相対値: 10 分前)、タイトル

ドロップダウン ボックスを下にスライドすると、さらに多くの未読メッセージが表示されます (表示されたメッセージ リストの最小 ID 未満の ID のみを取得します。つまり、アイコンをクリックした後に来る新しいメッセージは取得されません)

  • 3 ドロップダウン ボックス内のメッセージをクリックします

ドロップダウン ボックスは消えません

    未読メッセージ数を取得するインターフェースは引き続き 10 秒ごとに停止します
  • 未読メッセージ数が 1
  • 減少します

    #未読メッセージ リストは現在のメッセージ (スライス) を削除します。
  • #ポップアップ ボックスを表示します

  • #4 ポップアップ ボックスには、メッセージのソース、時刻 (絶対時間)、タイトル、および内容が表示されます。
  • 5 ポップアップ ボックスを閉じるか、周囲をクリックします:

ポップアップ ボックスが消えます

ドロップダウン ボックスは消えません

  • ドロップダウン ボックスをクリックし続けることができます。未読メッセージ

  • 6 ドロップダウン ボックスとアイコンの周囲をもう一度クリックします。
  • ドロップダウンボックスが消えます

既存のメッセージをクリアします未読メッセージのリスト

  • 未読メッセージの数を 10 秒ごとに取得するインターフェイスを復元します

  • 7 アイコンをもう一度クリックすると、#1 の状態に戻ります
  • Alibaba Cloud のアイコンの動作は次のとおりです:

    1. #未読メッセージの数は、ページが更新されたときに 1 回だけ要求され、その後は要求されません。その後は定期的に更新されます (もちろん、それも可能です。更新間隔が比較的長いためですが、見つかりませんでした。あるいは、長いリンクを確立するためにソケット メソッドが使用された可能性があります)

    2. 未読メッセージを表示するドロップダウン ボックスであるホバー アイコン

    3. アイコンをクリックして、サイトのメッセージ管理ページに入ります。デフォルトは「未読メッセージ」です。

    4 未読メッセージをクリックして新しいタブを開き、メッセージの詳細(詳細ページ)を表示します。タブは変更されないままです、つまり、未読メッセージが 1 つも減っておらず、クリックしたばかりのメッセージがドロップダウン ボックスから削除されません

    5 最大 5 つのメッセージが表示されます。ページは更新されないため、常にこれら 5 になります。

    6 その他の機能をスクロールする必要はありません。詳細を表示するには、クリックしてサイトのメッセージ管理ページに入ります。デフォルトは「未読メッセージ」です

    • アイコンをクリックすることとアイコンをクリックすることの違いは次のとおりです。アイコンをクリックするとサイトメッセージ管理ページの現在のページに直接ジャンプしますが、「もっと見る」をクリックすると新しいタブ#が作成されます。

    ##7 追加の [メッセージ受信管理] ボタンがあります。現在のページはサイトのメッセージ管理ページにジャンプしますが、デフォルトは [基本受信管理] です。

    ##ブラウザのプログレス バーを非表示にする

    未読メッセージの数を 10 秒ごとに取得するインターフェイスにより、ブラウザがプログレス バーを表示します。ユーザーの注意をそらして、この進行状況バーを非表示にします。 ページを更新するその他の動作には影響しません。

以上がPHPでサイトにプライベートメッセージ機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。