>백엔드 개발 >PHP 문제 >PHP로 사이트에서 개인 메시지 기능을 구현하는 방법

PHP로 사이트에서 개인 메시지 기능을 구현하는 방법

藏色散人
藏色散人원래의
2021-09-10 10:28:593258검색

PHP에서 사이트에 비공개 메시지 기능을 구현하는 방법: 1. POST 요청의 요청 본문을 읽습니다. 2. 하위 모듈을 호출하여 전체 사이트 또는 해당 사이트가 속한 사용자 그룹에 보낸 사이트 메시지를 삽입합니다. 3. 읽지 않은 사이트 메시지 수를 가져옵니다. 4. messageId가 현재 사용자에게 속하는지 확인합니다.

PHP로 사이트에서 개인 메시지 기능을 구현하는 방법

이 기사의 운영 환경: windows7 시스템, PHP7.1 버전, DELL G3 컴퓨터

PHP는 사이트에서 개인 메시지 기능을 어떻게 구현합니까?

사이트 메시지 디자인 아이디어 및 솔루션의 PHP 구현

1. 배경

현재 운영 및 유지 관리 플랫폼 사용자는 통신할 때 WeChat 및 이메일 알림에 더 의존하는 반면, 운영 및 유지 관리 플랫폼은 전체적으로 제품에는 내부 통신(사이트 내 메시징)을 수행할 수 있는 서비스도 필요합니다.

온사이트 메시지의 디자인 톤

온사이트 메시지의 디자인 톤은 사용자가 사이트 메시지를 어떻게 사용하는지에 따라 다릅니다.

  • 사용자는 작업 페이지에 집착하지 않습니다. 플랫폼 유지 관리, 메시지 알림 대기, 메시지 내용 보기 등을 수행한 후 조작하려는 페이지로 이동합니다.

  1. 즉, 현장 메시지는 첫 번째 입장이 아니며, 현장 메시지의 실시간 성격은 중요하지 않습니다.

  2. 많은 소셜 네트워킹 사이트(Facebook, Zhihu, Weibo 등)와는 달리 사용자는 소셜 네트워킹 사이트의 메인 페이지에 머무르며 지속적으로 새로운 콘텐츠를 새로 고치고 새 메시지(주로 개인 비공개 메시지, 다른 사람의 메시지)를 확인합니다. 답변 등) 시스템 알림 메시지를 확인하는 것은 절대 아닙니다)

  • 이메일 알림을 기반으로 운영을 위한 운영 및 유지 관리 플랫폼에 들어갈지 여부는 사용자가 결정합니다

  • 특히 많은 경우 예를 들어, 이메일에는 사용자가 동시에 처리해야 하는 여러 작업 주문이 있으며, 사용자는 작업 주문 플랫폼에서 제공하는 "내 할 일" 페이지에서 모든 작업을 수행합니다.

  • 실수로 이메일을 삭제하고, 운영할 모듈에 바로 들어갈 수 있는 이메일 링크가 없는 경우

  1. 그런 다음 링크/티켓 번호를 요청하여 지정된 페이지로 이동하실 수 있습니다

  2. 또는 해당 모듈에서 바로 진행 검색

위의 설명은 사용자들이 기본적으로 현장 메시지를 사용하지 않는다는 의미인데, 어떤 상황에서 현장 메시지를 사용하게 될까요?

  • 이메일은 보내지 마시고, 사이트 전체 알림, 편집 작업, 댓글 작업 등 사이트 내부 메시지에 대해서만 메시지 알림을 보내세요.

  • 특정 모듈에 대한 자세한 작업 기록이 없는 경우, 사이트 내 메시지 발생 시간을 확인할 수 있습니다

현재는 상품 소식 알림만 있고, 앞으로 사이트 전체 알림, 멘션, 좋아요, 댓글 추가 시 메시지 표시가 분류 및 집계되지 않습니다. 및 기타 유형의 사이트 내 메시지의 경우 유형별로 메시지를 집계하는 것을 고려해야 합니다.

2. 요구 사항 설명

  1. 사이트 내 메시지는 일반적으로 두 가지 요구 사항을 해결해야 합니다.

  • 사용자가 사용자에게 보내는 사이트 내 메시지 및 관리자가 사용자에게 보내는 사이트 내 메시지 : 즉, 일대일 보내기

  • 관리자의 현장 메시지를 여러 사용자, 사용자 그룹 및 전체 사이트에 보내는 것입니다. 즉, 일대다 보내기

( -특정 모듈에 대한 피드백 및 질문과 같은 제품에 대한 사용자의 사이트 메시지 )

현재 요구 사항은 다음과 같습니다.

1 관리자가 여러 사용자에게 사이트 내 메시지를 보냅니다.

사용자 진위 여부를 확인하지 않습니다.

제목 길이 및 내용 길이 제한(각각 45바이트, 150바이트, 한자 15자 및 50자에 해당)

수신자의 병음 길이 제한(최대 50바이트)

[추천 학습: "PHP 비디오 Tutorial"]

2명의 사용자는 자신의 사이트 메시지를 볼 수 있습니다.

"모두, 읽음, 읽지 않음"으로 필터링

메시지 소스별로 분류: 작업 주문 플랫폼, 리소스 관리, 자동 설치, 취약성 플랫폼, 오류 플랫폼. . .

3 사용자는 사이트 메시지를 삭제하고 일괄 삭제할 수 있습니다.

4 사용자는 사이트 메시지를 읽고, 일괄적으로 읽고, 모든 사이트 메시지를 읽음으로 표시할 수 있습니다.

5 운영 및 유지 관리 플랫폼 페이지 상단의 메시지 아이콘

  • 읽지 않은 메시지 표시 메시지 수, 99개를 초과하면 99+

  • 표시됩니다. 마우스를 올려놓으면 마지막 10개의 읽지 않은 메시지를 보여주는 드롭다운 상자가 나타납니다("시간" 표시). , "원본", "제목")

  • 드롭다운 상자 하단에는 두 개의 버튼이 있습니다. 읽지 않은 메시지를 더 로드하려면 "더보기"를, 사이트 메시지 목록 페이지로 이동하려면 "모두 보기"를 클릭하세요. 다른 창을 열려면)

  • 드롭다운 상자에서 읽지 않은 메시지를 클릭하고 팝업 상자를 통해 세부 정보를 표시한 다음 읽지 않은 목록에서 기록을 삭제하고 데이터베이스에서 읽음으로 표시하고 숫자를 확인하세요. 메시지 아이콘의 읽지 않은 메시지 수가 1개 감소합니다.

6 관리자 페이지:

사용자 업데이트

메시지 삭제

통계

모듈 추가

사이트 메시지 유형 추가

사이트 전체 메시지 보내기

4. 시스템 프로세스

사이트 메시지 보내기

  1. POST 요청의 요청 본문 읽기

  2. 확인 길이

  3. 데이터베이스에 삽입

  4. 반환

받기 사이트 메시지 목록

  1. 하위 모듈을 호출하여 사이트 전체 또는 내가 속한 사용자 그룹에 보내는 사이트 메시지를 삽입하세요

  2. 쿼리 조건에 따라 데이터베이스 데이터를 반환합니다

읽지 않은 사이트 메시지 수 가져오기

  1. 서브 모듈을 호출하여 전체 사이트 또는 내가 속한 사용자 그룹에 보낸 사이트 메시지를 삽입합니다

  2. 숫자 반환

일괄 읽기

  1. messageId가 현재 사용자에게 속하는지 확인

  2. inbox_message 테이블에서 읽기를 1로 설정하고 update_time

모두 읽었습니다

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)이라는 차원 설명이 있습니다. 서비스 메시지 등 각 주요 카테고리 내에서 활동 메시지 - 프로모션

등의 하위 카테고리로 나눌 수 있습니다. 메시지 소스와 메시지 유형은 직교할 수 있습니다. 즉, 작업 주문 플랫폼에도 활동 메시지가 있을 수 있습니다. 메시지 소스는 "제품 메시지"라는 메시지 유형일 수도 있습니다.

送 发 发

R
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;
E

Six, API 디자인

스테이션 편지 보내기: post/ v1/message

요청 본문 콘텐츠 유형: application/ json

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

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

사이트 메시지 목록 가져오기: GET /v1/message 사용자 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"
}

read , 현장 메시지 일괄 읽기: PUT /v1/read_messages/:messageIds

response

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

모두 읽기 PUT: /v1/read_all_messages

response 위와 동일

De Lete 및 일괄 삭제 사이트 메시지: 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 사이트 메시지 보내기

    순수한 인터페이스
  • 수신 사용자는 쉼표로 구분됩니다. , 진정성은 아니다 Verified
  • 수신자에게는 길이 확인이 50바이트
  • 제목 내용 길이 확인이 있는데 각각 45바이트와 150바이트입니다
  • module_name은 목록이므로 여기에서 하나를 선택해야 합니다
  • 2 다른 인터페이스는 프런트 엔드 페이지를 통해 테스트할 수 있습니다

8. 최적화

    읽지 않은 목록은 굵게 표시되고 읽은 목록은 일반 글꼴로 표시됩니다
  • 메시지 카테고리 사이트에 다양한 위도 라벨을 붙여 필터링, 검색, 차단을 용이하게 합니다
  • 사용자는 사이트 메시지 수신을 허용하도록 설정할 수 있습니다. 사이트 메시지의 소스
  • 관리자는 사이트를 추가, 삭제, 수정 및 확인할 수 있습니다. 누구도 볼 수 없도록 사이트 메시지를 취소하는 등 광범위한 메시지, 사이트 담당자 및 사이트 전체 메시지 속성
  • 관리 구성원은 사이트에서 보낸 메시지 수, 각 제품의 사용량, 메시지를 읽는 비율, 메시지를 읽은 시간, 메시지를 읽는 방식(클릭하여 열기 또는 일괄 작업) 등

9. 핵심 기능 포인트 디자인

아이콘 동작 오른쪽 상단

1 최신 읽지 않은 메시지 N개를 표시하려면 아이콘을 클릭하세요.

    드롭다운 상자 표시
  • 최신 읽지 않은 메시지 N개를 실시간으로 가져옵니다
  • N은 5~10개일 수 있습니다. , 구체적인 값은 드롭다운 상자의 높이 제한에 따라 달라집니다
  • 읽지 않은 판독값이 N보다 작으면 드롭다운 상자가 높이에 맞춰질 수 있습니다.
  • 읽지 않은 메시지가 없으면 "아직 새 메시지 없음"이 표시됩니다. "
  • 10초마다 읽지 않은 메시지 수를 가져오는 인터페이스를 중지하세요

2 드롭다운 상자에 메시지 소스, 시간(현재 기준) 시간: 10분 전), 제목

    Down 읽지 않은 메시지를 더 많이 표시하려면 드롭다운 상자를 슬라이드하세요. (표시된 메시지 목록의 최소 ID보다 작은 ID만 가져옵니다. 즉, 클릭한 후에는 새 메시지를 받지 못합니다. 아이콘)

3 드롭다운 상자에서 메시지를 클릭하세요

    드롭다운 상자가 사라지지 않습니다
  • 여전히 10초마다 읽지 않은 메시지 수를 가져오는 인터페이스가 중지됩니다
  • 읽지 않은 메시지 수가 1개 감소합니다.
  • 읽지 않은 메시지 목록에서 현재 메시지(슬라이스)가 삭제됩니다.
  • 팝업 상자 표시

4 팝업 상자는 다음을 표시합니다. 메시지의 출처, 시간(절대 시간), 제목, 내용

5 팝업 상자를 닫거나 주변을 클릭하세요:

    팝업 상자가 사라집니다
  • 아래로 내리세요 상자가 사라지지 않습니다
  • 읽지 않은 메시지를 계속 클릭해도 됩니다

6 드롭다운 상자와 아이콘 주변을 다시 클릭하세요

    드롭다운 상자가 사라집니다
  • 기존 항목 지우기 읽지 않은 메시지 목록
  • 10초마다 읽지 않은 메시지 수를 가져오는 인터페이스를 복원합니다

7 1번 상태로 돌아가려면 아이콘을 다시 클릭하세요

Alibaba Cloud의 아이콘 동작은 다음과 같습니다.

  1. 읽지 않은 메시지 수는 페이지를 새로 고칠 때 한 번만 요청되며 그 이후에는 정기적으로 새로 고쳐지지 않습니다(물론 새로 고침 시간이 다를 수 있음). 간격이 비교적 길어 찾을 수 없거나 소켓 방식을 사용하여 긴 링크를 설정할 수 있습니다.)

  2. 읽지 않은 메시지를 표시하는 드롭다운 상자인 마우스오버 아이콘

  3. 아이콘을 클릭하여 들어갑니다. 사이트 메시지 관리 페이지에서 기본값은 "읽지 않은 메시지"입니다.

4 읽지 않은 메시지를 클릭하고 새 탭을 열어 메시지 세부 정보(세부 정보 페이지)를 표시합니다. 원본 탭 내용은 변경되지 않습니다. 즉, 읽지 않은 메시지에서 1을 뺀 항목이 없으며, 방금 클릭한 메시지는 드롭다운 상자에서 삭제되지 않습니다

5 페이지를 새로 고치지 않는 한 최대 5개의 메시지가 표시될 수 있습니다. 항상 이 5개의 메시지가 있어야 합니다

6 추가 스크롤 기능은 없으며 더 보기만 가능합니다. 사이트 메시지 관리 페이지에 들어가려면 클릭하세요. 기본값은 "읽지 않은 메시지"입니다.

  • 아이콘 클릭과 아이콘 클릭의 차이점은 다음과 같습니다. 아이콘은 현재 페이지에서 사이트 메시지 관리 페이지로 바로 이동합니다. "더보기"를 클릭하면 새 탭이 생성됩니다

7 현재 페이지는 사이트 메시지 관리 페이지로 이동합니다. , 그러나 기본값은 "기본 수신 관리"입니다.

브라우저 진행률 표시줄 숨기기

매 10초마다 읽지 않은 메시지 수를 가져오는 인터페이스는 브라우저에서 진행률 표시줄을 표시하도록 트리거하여 작업에 방해가 됩니다. 사용자의 주의를 끌기 위해서는 진행 표시줄을 숨겨야 합니다.

페이지 새로고침의 다른 동작은 영향을 받지 않습니다.

위 내용은 PHP로 사이트에서 개인 메시지 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.