PHPでサイトにプライベートメッセージ機能を実装する方法
サイトにプライベート メッセージ機能を実装する
php メソッド: 1. POST リクエストのリクエスト本文を読み取ります; 2. サブモジュールを呼び出し、サイト全体またはユーザー グループに送信されるサイト メッセージを挿入します。に属しています; 3. 未読のサイトメッセージ数量を取得します; 4. messageId が現在のユーザーに属しているかどうかを確認します; 5. 一括削除を実現します。
この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター
php はどのように実現しますか?サイトのプライベートメッセージ機能?
サイト メッセージ デザインのアイデアと計画の PHP 実装
1. 背景
現在使用している操作と計画メンテナンス プラットフォーム ユーザーは通信する際、WeChat や電子メール通知に依存することが多く、製品全体として、運用およびメンテナンス プラットフォームには内部コミュニケーション (サイト内メッセージング) を実行できるサービスも必要です。
オンサイト メッセージのデザイン トーン
オンサイト メッセージのデザイン トーンは、次によって異なります。ユーザーがオンサイト メッセージをどのように使用するか:
ユーザーは、運用および保守プラットフォームのページに固執せず、メッセージ通知を待ってメッセージの内容を表示し、その後、目的のページにジャンプします。操作される。
#言い換えれば、オンサイト メッセージは最初のエントリ ポイントではなく、オンサイト メッセージのリアルタイム性は重要ではありません。
多くのソーシャル ネットワーキング サイト (Facebook、Zhihu、Weibo など) とは異なり、ユーザーはソーシャル ネットワーキング サイトのメイン ページに留まり、常に新しいコンテンツを更新し、コンテンツをチェックします。新しいメッセージを同時に送信 (主に個人のプライベート メッセージ、他の人の返信などは、システム通知メッセージを確認することを目的としたものではありません)
ユーザーは、新しいメッセージを送信するかどうかを決定します。
多数の電子メールがある場合、たとえば、ユーザーが現場で処理する必要がある作業指示書が複数ある場合は、電子メール通知に基づいて運用および保守プラットフォームにアクセスします。同時に、ユーザーは作業指示プラットフォームが提供する「My To Do」ページですべての作業を実行します。
メールを誤って削除し、操作対象のモジュールに直接入るメールリンクがない場合
その後、「リンク/注文番号で指定したページに移動します」を要求することができます
-
または関連するモジュールを直接検索します
上記の記述では、ユーザーは基本的にオンサイトメッセージを利用しないことになりますが、どのような状況でオンサイトメッセージを利用するのでしょうか?
- #電子メールは送信せず、サイト全体の通知、編集操作、コメント操作など、サイト内のメッセージ通知のみを送信します。
- 特定モジュールの場合 詳細な動作記録がない場合、サイト内メッセージの発生時刻を確認できます
2. 要件の説明
- サイト内メッセージは通常、次の 2 つの要件を解決する必要があります:
- ユーザーからユーザーへのサイト内メッセージ、管理者からユーザーへのサイト内メッセージ、つまり 1 対 1 の送信
- 管理者から複数のユーザー、ユーザー グループおよびサイト全体へのサイト内メッセージ: つまり、1 対多の送信
タイトルの長さとコンテンツの長さを制限します (それぞれ 45 バイトと 150 バイト、中国語の 15 文字と 50 文字に相当します) 受信者のピンインの長さを制限します (最大 50 バイトの長さ) [推奨学習: 「
PHP ビデオ チュートリアル 」]
2 ユーザーは自分のサイト情報を表示できます 「すべて」をクリックします、既読、未読」フィルターメッセージ ソースごとに分類: 作業指示書プラットフォーム、リソース管理、自動インストール、脆弱性プラットフォーム、障害プラットフォーム。 。 。 3 ユーザーはサイト メッセージを削除および一括削除できます4 ユーザーはすべてのサイト メッセージを読み取り、一括読み取りし、既読としてマークすることができます 5運用保守プラットフォームページ上部のメッセージアイコン- は未読メッセージ数を表示し、99 を超える場合は 99 # と表示します##. マウスをその上に置くと、ドロップダウン メニュー ボックスが表示され、最新の 10 件の未読メッセージが表示されます (「時間」、「ソース」、「タイトル」を表示)
-
- ドロップダウン ボックスの未読メッセージをクリックすると、ボックスがポップアップ表示され、詳細が表示されます。その後、未読リストのレコードを削除し、データベース内で既読としてマークを付け、数値を減らします。メッセージ アイコン内の未読メッセージの数 (1 件分)
統計モジュールの追加サイト メッセージ タイプの追加サイト全体のメッセージの送信#4. システム プロセス
サイト全体のメッセージを送信する
#POST リクエストのリクエスト本文を読む- 検証の長さ #データベースへの挿入
- ##Return
- ##サイト メッセージのリストの取得
- サブモジュールを呼び出し、サイト全体または所属するユーザー グループに送信されるサイト メッセージを挿入します。
- #クエリ条件に従ってデータベース データを返す
- サブモジュールを呼び出し、サイト全体または所属するユーザー グループに送信するサイト メッセージを挿入します。
- 数量を返す
- messageId が現在のユーザーに属しているかどうかを確認します
- inbox_message で read を 1 に設定しますtable を変更して update_time
update inbox_message set “read”=1, “update_time”=now where “receiver_name”=currentUser() and “read” = 0
- messageId が属するかどうかを確認する現在のユーザーに
- 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) と呼ばれる緯度の説明があります。各主要カテゴリ内で、アクティビティなどのサブカテゴリに分割できます。メッセージ - プロモーション活動
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;
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_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 設計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;
サイト メッセージの送信: POST /v1/message
リクエスト本文 Content-Type: application/json
{
"title": "工单审批",
"content": "XXX提交了变更申请,请审批",
"to": "sunzhongyuan,shenli,wangya",
"module_name": "工单平台",
"link": "xxx"
}
{ "code": 200, "data": 32, "msg": "OK" }
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/:messageIdshttp://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" }
response
{
"code": 200,
"data": "OK",
"msg": "OK"
}
応答 上記と同じ
#サイト メッセージの削除と一括削除: PUT /v1/delete_messages/:messageIdsresponse 同上
サイトメッセージをすべて削除: 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" }
1 サイトメッセージの送信
純粋なインターフェイス
受信ユーザーは次のように区切られます。カンマが含まれており、信頼性は検証されません。
受信ユーザーは長さチェック、50 バイトです。
タイトル コンテンツには長さチェックがあり、それぞれ 45 バイトと150 バイト
module_name はリストです。ここから 1 つ選択する必要があります
2 他のインターフェイスはフロントエンド ページを通じてテストできます
未読リストを太字で表示し、既読リストを太字で表示できます。通常のフォント
サイト上のメッセージを分類し、さまざまな緯度でラベルを付けると、フィルタリング、検索、ブロックに便利です
ユーザーは設定できます受信が許可されているサイト メッセージのメッセージ ソース
- #管理者はサイト全体のメッセージを制御できます。すべてのサイト担当者とメッセージ属性は追加、削除、変更、確認できます。サイト メッセージを誰にも見られないようにキャンセルするなど。
- 管理者は、サイト内で送信されたメッセージの数と、製品の使用状況、割合をカウントできます。読まれたメッセージの数、メッセージが読まれた時間、メッセージが読まれた方法 (クリックして開くか、バッチ操作) など。
- 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 回だけ要求され、その後は要求されません。その後は定期的に更新されます (もちろん、それも可能です。更新間隔が比較的長いためですが、見つかりませんでした。あるいは、長いリンクを確立するためにソケット メソッドが使用された可能性があります)
-
未読メッセージを表示するドロップダウン ボックスであるホバー アイコン
-
アイコンをクリックして、サイトのメッセージ管理ページに入ります。デフォルトは「未読メッセージ」です。
4 未読メッセージをクリックして新しいタブを開き、メッセージの詳細(詳細ページ)を表示します。タブは変更されないままです、つまり、未読メッセージが 1 つも減っておらず、クリックしたばかりのメッセージがドロップダウン ボックスから削除されません
5 最大 5 つのメッセージが表示されます。ページは更新されないため、常にこれら 5 になります。
6 その他の機能をスクロールする必要はありません。詳細を表示するには、クリックしてサイトのメッセージ管理ページに入ります。デフォルトは「未読メッセージ」です
アイコンをクリックすることとアイコンをクリックすることの違いは次のとおりです。アイコンをクリックするとサイトメッセージ管理ページの現在のページに直接ジャンプしますが、「もっと見る」をクリックすると新しいタブ#が作成されます。
未読メッセージの数を 10 秒ごとに取得するインターフェイスにより、ブラウザがプログレス バーを表示します。ユーザーの注意をそらして、この進行状況バーを非表示にします。 ページを更新するその他の動作には影響しません。
以上がPHPでサイトにプライベートメッセージ機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
