首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Discuz! 群組發文自動通知全體成員:hook notification_add 實作

     編輯:PHP 相關知識

需求背景

Discuz! 群組(Group)發文時,預設不會通知所有成員。需在發文流程中掛入通知邏輯,讓群組內每位成員收到系統提醒。

實作位置

檔案:source/class/module/module_forum_thread.php
位置:post_new_thread() 方法結束前(約第 139 行),資料寫入成功後。

核心程式碼

<?php
// 在 module_forum_thread.php 適當位置插入
if ($this->param['isgroup'] == 1) {
    $subject = $this->param['subject']; // 主題標題
    $author = $_G['username']; // 發文者
    
    // 取得群組所有成員 UID
    $query = DB::fetch_all('SELECT uid FROM ' . DB::table('forum_groupuser') . " WHERE fid={$this->forum['fid']}");
    
    foreach ($query as $member) {
        // 避免通知發文者自己
        if ($member['uid'] == $_G['uid']) continue;
        
        notification_add(
            $member['uid'],           // 接收者 UID
            'system',                 // 通知類型:系統通知
            $author . ' 發表了新主題:' . $subject, // 通知內容
            [
                'from_id' => 0,
                'from_idtype' => 'sendnotice'
            ],
            1                         // $system = 1 系統通知
        );
    }
}

notification_add 參數詳解

參數說明常用值
$touid接收通知的用戶 UID整數
$type通知類型system、pm、post、comment
$note通知文字內容字串
$notevars額外變數陣列,供模板渲染使用['from_id' => $tid, 'from_idtype' => 'thread']
$system是否為系統通知(1=是,0=否)1 或 0

效果驗證

  1. 以群組成員 A 身份發文
  2. 以群組成員 B 登入,頂部提示「您有新的系統通知」
  3. 點開通知中心,顯示「A 發表了新主題:xxx」

效能優化建議

  • 成員超過 500 人時,建議改用 延遲任務(cron 或 task)分批發送,避免請求超時
  • 可新增群組設定「是否開啟發文通知」,由版主控制
  • 通知內容加入主題連結:forum.php?mod=viewthread&tid={$tid},方便直接跳轉

相容性提醒

此修改基於 Discuz! X 系列(X3.4/X3.5)。若為 Discuz! 7.2/8.0,表名稱與欄位可能不同,請依實際資料庫結構調整 SQL。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved