·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

discuz回贴通知插件实现-页面嵌入点(钩子)

98 1
发表于 2025-1-11 17:07:34 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1、如何保证主题被回复时业务代码被执行。
2、获得主题,主题发布者,贴子等信息。
3、discuz发送email邮件。

discuz使用嵌入点(钩子)来处理代码的执行时机。

当用户开启插件开发者模式时,页面上会输出提供好的预先定义的嵌入点。

例如:我们需要在用户发贴时,告知用户是否开启了回贴通知。

1、我们在插件后台添加页面嵌入
2、在插件目录下创建noticeme.class.php文件
该文件为类文件,定义该插件的嵌入类,该类中的方法就是嵌入点中的钩子方法。
嵌入类:1、全局嵌入类,2、模块嵌入类
  1. <?php
  2. //判断是否被常规请求
  3. defined('IN_DISCUZ') or die('Access Denied');
  4. //全局嵌入类
  5. class plugin_插件标识符 {
  6. }
  7. //模块嵌入类
  8. class plugin_插件标识符_forum extends plugin_插件标识符 {
  9. }
复制代码
通过嵌入点,选择使用嵌入类。
  1. <?php
  2. //判断是否被常规请求
  3. defined('IN_DISCUZ') or die('Access Denied');
  4. //全局嵌入类
  5. class plugin_post_notice {
  6. }
  7. //模块嵌入类
  8. class plugin_post_notice_forum extends plugin_post_notice {
  9.     //嵌入贴子发表的钩子函数
  10.     public function post_top() {
  11.         //当前$_G成为全局$_G的一个引用
  12.         global $_G;
  13.         $mForumPostNotice = C::t('#post_notice#forum_post_notice');
  14.         $isNotice = $mForumPostNotice->getNoticeState($_G['uid']);
  15.         return $isNotice ? lang('plugin/post_notice', 'enable_notice') :
  16.         lang('plugin/post_notice', 'disable_notice');
  17.     }
  18. }
复制代码

除了页面上可以看到的嵌入点,discuz在所有模块执行前,都会执行嵌入函数(钩子)。

源址:https://www.cnblogs.com/jkko123/p/6294648.html
我要说一句 收起回复

评论1

Discuz智能体Lv.8 发表于 2025-3-18 01:33:10 | 查看全部
要实现一个Discuz回贴通知插件,确保在主题被回复时执行特定的业务代码,并获取主题、主题发布者、帖子等信息,同时通过Discuz发送邮件通知,可以按照以下步骤进行:

### 1. 确保主题被回复时业务代码被执行

在Discuz中,可以通过嵌入点(钩子)来确保在特定事件发生时执行自定义代码。对于回贴通知插件,我们需要在用户回复主题时触发业务代码。

#### 1.1 添加页面嵌入点

在插件后台添加页面嵌入点,选择适当的嵌入点来捕获用户回复主题的事件。常用的嵌入点包括:

- `forum_post_after`:在用户发帖后触发。
- `forum_reply_after`:在用户回复主题后触发。

#### 1.2 创建嵌入类

在插件目录下创建 `noticeme.class.php` 文件,定义插件的嵌入类。该类中的方法将作为嵌入点中的钩子方法。

  1. <?php

  2. if (!defined('IN_DISCUZ')) {
  3.     exit('Access Denied');
  4. }

  5. class plugin_noticeme {

  6.     public function forum_reply_after($param) {
  7.         // 在这里编写业务代码
  8.         $this->send_notification($param);
  9.     }

  10.     private function send_notification($param) {
  11.         // 获取主题、主题发布者、帖子等信息
  12.         $tid = $param['tid']; // 主题ID
  13.         $pid = $param['pid']; // 帖子ID
  14.         $authorid = $param['authorid']; // 回复者ID
  15.         $subject = $param['subject']; // 主题标题

  16.         // 获取主题发布者信息
  17.         $thread = C::t('forum_thread')->fetch($tid);
  18.         $thread_authorid = $thread['authorid']; // 主题发布者ID

  19.         // 获取主题发布者的邮箱
  20.         $thread_author = C::t('common_member')->fetch($thread_authorid);
  21.         $email = $thread_author['email'];

  22.         // 发送邮件通知
  23.         $this->send_email($email, $subject, $pid);
  24.     }

  25.     private function send_email($email, $subject, $pid) {
  26.         // 使用Discuz的邮件发送功能
  27.         $message = "您的主题 '{$subject}' 有了新的回复,点击查看:".dzz_url('forum.php?mod=viewthread&tid='.$tid.'&pid='.$pid.'#pid'.$pid);
  28.         $subject = "您的主题有了新的回复";

  29.         if (!sendmail($email, $subject, $message)) {
  30.             // 邮件发送失败处理
  31.             // 可以记录日志或进行其他处理
  32.         }
  33.     }
  34. }
复制代码


### 2. 获取主题、主题发布者、帖子等信息

在上面的代码中,我们通过 `$param` 参数获取了主题ID (`tid`)、帖子ID (`pid`)、回复者ID (`authorid`) 等信息。然后通过 `C::t('forum_thread')->fetch($tid)` 获取主题的详细信息,包括主题发布者ID (`authorid`)。接着通过 `C::t('common_member')->fetch($thread_authorid)` 获取主题发布者的详细信息,包括邮箱地址。

### 3. 使用Discuz发送邮件

Discuz提供了 `sendmail` 函数来发送邮件。在上面的代码中,我们使用 `sendmail` 函数发送邮件通知主题发布者。邮件内容包含了主题标题和回复的链接。

### 4. 启用插件开发者模式

在Discuz后台启用插件开发者模式,页面上会输出预先定义的嵌入点。你可以通过这些嵌入点来调试和验证你的插件是否正常工作。

### 5. 测试插件

安装并启用插件后,测试回复主题时是否能够正确触发邮件通知。确保邮件发送功能正常工作,并且邮件内容符合预期。

### 总结

通过以上步骤,你可以实现一个Discuz回贴通知插件,确保在主题被回复时执行特定的业务代码,并获取主题、主题发布者、帖子等信息,最后通过Discuz发送邮件通知。如果你有更多问题或需要进一步的帮助,请随时联系DZ插件网的技术支持团队。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.22.63.154,GMT+8, 2025-4-7 07:18 , Processed in 0.318346 second(s), 74 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表