当前位置: 首页 > news >正文

DzzOffice 通知功能(notification_add)调用

通知系统是 DzzOffice 协同办公平台的核心功能之一,它能够及时向用户推送各类重要信息,如审核结果、新内容提醒、任务分配等。本文将系统讲解 DzzOffice 通知功能的调用方法,结合实际案例分析,帮助开发者快速掌握通知系统的实现技巧。

一、通知功能核心方法解析

DzzOffice 的通知功能主要通过dzz_notification::notification_add静态方法实现,主要流程包括:

  1. 向指定用户($uid)添加系统通知;
  2. 支持重复通知控制(根据系统配置判断是否更新已有通知,而非新建);
  3. 自动更新用户的 “未读提醒数”(newprompt);
  4. 可关联语言包实现多语言通知,支持自定义跳转链接。

1.1 方法定义

public static function notification_add($uid,        // 接收通知的用户UID$type,         // 通知类型(需唯一)$note,         // 语言包键名(用于获取通知内容)$notevars = [],// 通知变量数组(替换语言包中的占位符)$category = 0, // 通知分类(默认0,无需自定义时可留空)$langfolder = ''// 语言包路径(指定自定义语言文件位置)
)

1.2 核心方法参数详解

参数名作用类型是否必填说明与示例
$uid指定接收通知的用户int必须是有效的用户 UID,需确保用户存在(方法内部会通过 getuserbyuid 验证)。示例:1001(用户 UID 为 1001)
$type通知类型标识string用于区分不同业务场景,建议保持唯一(避免重复通知误判)。命名建议:业务标识_唯一ID,示例:article_publish_5(5 为文章 ID)
$note语言包键名string语言包模式下关联模板的核心标识,用于匹配通知标题、正文、跳转链接等模板。示例:article_publish(对应语言包中该键的模板)
$notevars通知变量数组array包含语言包变量、自定义内容、业务关联信息等动态数据。示例:['title' => '实名认证', 'url' => 'verify.php']
$category通知分类int用于对通知归类,默认值为0。示例:1(归类为"系统通知")
$langfolder语言包路径string指定自定义语言包所在文件夹,默认使用系统默认路径。示例:dzz/article 对应 dzz/article/language/zh-cn/lang.php

1.3 $notevars 数组关键字段详解

$notevars 数组用于传递动态内容,关键字段如下:

参数名作用类型是否必填说明与示例
from_id业务关联IDint/string关联具体业务对象(如应用ID、订单ID),0表示系统通知。示例:102(关联ID为102的应用)
from_idtype业务类型标识string描述from_id的类型,用于区分业务场景。示例:'app'(表示from_id是应用ID)
note_title自定义通知标题string传递此参数则不调用语言包的$note_title模板。示例:'新消息提醒'
note_message自定义通知正文string传递此参数则不调用语言包的$note模板。示例:'您有一条新的好友请求'
note_wx自定义微信通知内容string传递此参数则不调用语言包的$note_wx模板。示例:'微信端新消息提醒'
note_url自定义跳转链接string传递此参数则不调用语言包的$note_redirecturl模板。示例:'home.php?mod=msg'
其他自定义键语言包变量mixed需与语言包中的{xxx}占位符对应。示例:语言包有{title}则需传递'title' => '审核任务'

二、调用方法详解

方法一:使用语言包动态生成内容(推荐)

通过语言包定义通知模板,notification_add 方法会自动根据 $note 标识匹配模板,并使用 $notevars 中的变量替换占位符,适用于多语言场景或需统一管理的通用通知。

步骤:
  1. 定义语言包(如 lang.php):
$lang = array(// 通知正文模板({title}和{url}为占位符,将被$notevars替换)'profile_moderate' => '有新的待处理{title},<a href="{url}">现在处理</a>',// 微信通知模板'profile_moderate_wx' => '有新的待处理{title}',// 跳转链接模板'profile_moderate_redirecturl' => '{url}',// 通知标题模板'profile_moderate_title' => '{title} 审核提醒',
);
  1. 调用通知方法:
// 获取管理员用户列表(示例:向管理员发送审核通知)
foreach (C::t('user')->fetch_all_by_adminid(1) as $value) {if ($value['uid'] != $_G['uid']) { // 排除当前用户$notevars = array('from_id' => 0, // 0 表示系统通知'from_idtype' => 'app', // 关联类型为应用'url' => 'admin.php?mod=member&op=verify&vid=' . $vid, // 跳转链接变量{url}'author' => getglobal('username'), // 发送人'authorid' => getglobal('uid'), // 发送人 ID'dataline' => dgmdate(TIMESTAMP), // 时间'title' => $_G['setting']['verify'][$vid]['title'], // 审核标题变量{title});dzz_notification::notification_add($value['uid'], // 接收人 ID'profile_moderate_' . $vid, // 通知类型'profile_moderate', // 语言包标识$notevars);}
}
优点:
  • 多语言支持:通过切换语言包即可适配不同语言环境(如中文、英文),无需修改代码。
  • 维护便捷:通知模板集中管理,修改语言包可批量更新所有相关通知内容。
  • 动态灵活:同一模板可通过不同 $notevars 生成多样化内容(如不同审核类型的通知)。
缺点:
  • 依赖语言包:若语言包缺失$note对应的键,会导致内容显示异常(如直接显示键名)。
  • 模板限制:需提前规划占位符,不适合完全个性化的临时通知场景。

方法二:自定义内容(不依赖语言包)

直接通过 $notevarsnote_titlenote_message 等字段指定内容,无需语言包支持,适用于个性化、临时或无需多语言的场景。

示例:
// 新用户注册欢迎通知(自定义内容)
$welcomemsgtitle = "欢迎加入平台!";
$welcomemsgtxt = "亲爱的用户,感谢您的注册,点击 <a href='home.php'>进入首页</a> 开始使用。";$notevars = array('from_id' => 0, // 系统通知'from_idtype' => 'welcomemsg', // 欢迎消息类型'note_title' => $welcomemsgtitle, // 自定义标题(不调用语言包)'note_message' => $welcomemsgtxt, // 自定义正文(不调用语言包)'note_url' => 'home.php', // 自定义跳转链接
);dzz_notification::notification_add($result['uid'], // 接收人 ID(新注册用户 ID)'register_welcomemsg_' . $result['uid'], // 通知类型'register_welcomemsg', // 语言包标识(此处被自定义内容覆盖,可留空)$notevars
);
优点:
  • 灵活度高:可完全自定义通知内容,适合临时、个性化场景。
  • 无依赖:无需维护语言包,降低前期配置成本。
  • 快速实现:直接写死内容,无需考虑占位符与变量的对应关系。
缺点:
  • 多语言适配困难:需手动处理不同语言,无法通过语言包批量切换。
  • 代码冗余:通知内容分散在代码中,修改需逐个调整,维护成本高。

两种方法的对比与适用场景

维度方法一(语言包)方法二(自定义内容)
多语言支持支持(推荐)不支持(需手动处理)
维护成本低(集中管理语言包)高(内容分散在代码中)
灵活度中等(依赖模板)高(完全自定义)
适用场景通用通知(如审核提醒、任务通知)临时/个性化通知(如注册欢迎、活动)

三、进阶技巧

3.1 通知去重逻辑

系统通过 $_G['setting']['notificationrepetition'] 控制重复通知行为:

  • 若关闭(默认):当 from_idfrom_idtypeuidtype 完全相同时,视为重复通知,会更新已有通知的 from_num(累计次数)和时间戳,而非新建通知。
  • 若开启:允许重复发送,每次调用都会新增一条通知。

3.2 $type 唯一性设计

$type 是判断通知唯一性的核心参数之一,建议按以下规则命名:

// 格式:业务标识 + 唯一ID(避免不同业务的通知被误判为重复)
$type = 'task_assign_' . $taskid; // 任务分配通知(关联任务ID)
$type = 'doc_share_' . $docid . '_' . $uid; // 文档分享通知(关联文档ID和接收人ID)

3.3 应用关联与系统通知

  • 关联应用时,通过 C::t('app_market')->fetch_appid_by_mod 获取应用 ID 并赋值给 from_idfrom_idtype 设为 'app'
  • 系统通知直接将 from_id 设为 0from_idtype 可设为 'system' 或留空。

四、总结

DzzOffice 通知功能通过语言包模式和自定义模式,满足了不同场景下的通知需求。核心是理解 $notevars 与语言包的变量替换逻辑,以及 $typefrom_id 的唯一性约束。

  • 对于需长期维护、多语言支持的通用通知(如审核提醒、任务通知),推荐使用语言包模式
  • 对于临时、个性化的通知(如注册欢迎、活动推送),推荐使用自定义模式
    根据业务场景灵活选择,可在灵活性与可维护性之间取得平衡,充分发挥通知系统的价值。
http://www.dtcms.com/a/462137.html

相关文章:

  • 西安手机网站建设公司排名安徽房产网站建设
  • 杭州强龙网站建设电话广西桂林天气预报7天
  • autosar
  • LinkMate 智能会议室系统:基于 Qt / QML / WebRTC / FFmpeg / Whisper / OpenGL 的实时音视频会议平台
  • JavaScript编程工具有哪些?老前端的实用工具清单与经验分享
  • 企业营销网站服务器1g够wordpress 电影网站
  • 360°全景视频 数据集Dataset
  • 项目愿景缺乏共识会带来哪些风险
  • 网站服务器vps温州做网站哪里好
  • 分片并发上传实现
  • JavaWeb后端实战(IOC+DI)
  • php网站模板制作工具昆明网架公司
  • 甘肃省住房和城乡建设厅网站网站域名登录
  • lazarust中SqlConnector的使用
  • 美国银行与Anchorage合作推动稳定币发展,平台XBIT在去中心化交易所领域发力
  • Gemini 2.5如何通过视觉理解,告别脆弱的UI测试脚本
  • 【星海出品】ASCII
  • 青州网站建设优化排名找工程包工平台app
  • 哪些网做网站比较好网站产品关键词导出
  • python学习之单例模式和魔法方法属性
  • 网站地址英文网站视频与服务器的关系
  • 优秀电商设计网站有哪些免费的推广平台有哪些
  • 【论文阅读】LANGUAGE MODELS CAN LEARN FROM VERBAL FEEDBACK WITHOUT SCALAR REWARDS
  • 怎么管理网站的内容吗网站建设与实现毕业答辩ppt
  • 苏州做网站的哪个公司比较好PS做图标兼职网站
  • 【Flutter】约束错误总结(Constraint Error 全面解析)
  • 2025年Flutter状态管理新趋势:AI友好度成为技术选型第一标准
  • WinPython下载安装和使用教程(附安装包,图文并茂)
  • 最好的网站开发平台网站改版的必要性
  • 解构自我:能力的三维、天性与养成,选择怎样的生活