Discuz积分转账提醒 定制版 1.0.0_230303(nciaer_transfer_tip)
插件介绍默认情况下,dz的积分转账在没有填写备注的情况下,接收人没有任何提醒,这很不方便,安装本插件后,即使不填写备注,接收人也可以收到提醒。
并且可以邮件提醒,效果请看截图。
功能介绍
[*]支持启用的用户组
[*]支持开启仅激活邮箱接收;
[*]支持自定义邮件标题和内容;
[*]兼容各大主流浏览器;
[*]更多功能请安装后体验。
关于“积分转账提醒 定制版”插件的技术实现与典型问题解决方案:
一、核心实现原理
1. 通过挂载积分转账的钩子点(如credit_after_transfer),在source/class/class_credit.php的转账方法后触发通知
2. 调用notification_add()函数创建站内提醒(参考:插件接口文档/通知模块)
3. 邮件提醒使用Discuz内置的sendmail()方法,通过source/class/class_mail.php处理发送队列
二、常见问题排查指南
▶️ 情况1:用户未收到站内提醒
1. 检查用户组权限设置:
SELECT * FROM pre_common_pluginvar WHERE pluginid=插件ID AND title='allowedgroups'
2. 验证用户是否在被允许的组ID范围内
3. 检查系统通知开关:
SELECT value FROM pre_common_setting WHERE skey='settings'
▶️ 情况2:邮件提醒未触发
1. 验证SMTP配置有效性:
php ./source/admincp/admincp_checktools.php testmail
2. 检查插件邮箱验证开关:
SELECT * FROM pre_common_pluginvar WHERE pluginid=插件ID AND title='needverify'
3. 确认用户邮箱已验证:
SELECT emailstatus FROM pre_common_member WHERE uid=目标用户ID
三、自定义内容开发建议
1. 邮件模板变量扩展(在插件语言包中增加):
// source/plugin/nciaer_transfer_tip/language/lang_email.php
$lang = array_merge($lang, array(
'variable_guide' => '{username} 接收人昵称<br>{fromuser} 转账人昵称<br>{amount} 转账金额'
));
2. 添加短信通知(需对接第三方API):
// 在插件主类中扩展
class plugin_nciaer_transfer_tip extends plugin_base {
public function credit_after_transfer($param) {
// 原有通知逻辑...
$this->_send_sms($param['toid'], $param['amount']);
}
private function _send_sms($uid, $amount) {
// 调用短信接口实现
}
}
四、数据库结构说明
插件主要涉及三张表:
1. pre_common_pluginvar(存储插件配置参数)
2. pre_common_member_archive(用户基础数据)
3. pre_common_credit_log(积分流水记录)
五、性能优化建议
1. 异步处理建议方案:
// 在插件中启用异步队列
if($this->config['async']) {
save_syslog('transfer_notify', serialize($notifyData));
} else {
$this->_send_real_time($notifyData);
}
2. 高频发送限制:
// 在发送前校验频次
$count = C::t('common_credit_log')->count_by_uid_action(
$param['fromid'],
'TRANSFER',
TIMESTAMP - 3600
);
if($count > 10) {
return $this->_error('操作过于频繁');
}
如需更深入的二次开发方案,建议提供具体需求场景,我可基于Discuz插件开发规范给出针对性实现方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 以下是针对Discuz积分转账提醒插件的专业技术分析及常见问题解决方案:
一、核心功能实现原理
1. 通过Discuz的积分转账钩子(hook)扩展点,在extcredits_transfer函数执行后触发通知机制
2. 使用系统消息提醒模块(notification)实现站内提醒功能
3. 集成Discuz内置的邮件队列系统(mail_queue)实现异步邮件发送
二、推荐配置方案
1. 用户组权限配置路径:
后台 → 用户 → 用户组 → 编辑目标用户组 → 积分相关 → 启用转账功能
2. 邮件模板配置建议:
// 语言包变量示例
$lang['email_title'] = '{username}给您转账了{amount}{currency}';
$lang['email_content'] = '您于{datetime}收到来自{fromuser}的转账,当前余额:{balance}';
三、常见问题排查指南
1. 提醒未触发检查清单:
- 确认extend_credit_transfer插件钩子已激活
- 检查source/plugin/nciaer_transfer_tip/目录权限是否为755
- 验证插件是否启用于应用中心 → 插件列表
2. 邮件发送失败处理:
- 检查SMTP配置:后台 → 站长 → 邮件设置
- 测试邮件队列运行状态:
php ./source/plugin/nciaer_transfer_tip/cron/sendmail.php
- 查看日志文件:data/log/日期_mail.php
四、高级定制开发建议
1. 增加短信提醒(需集成第三方短信网关):
// 在transfer_notify.class.php中添加:
public function send_sms($mobile, $params) {
require_once libfile('class/smsgateway');
$sms = new sms_gateway();
return $sms->send($mobile, $this->sms_template($params));
}
2. 多语言支持方案:
- 在plugin/nciaer_transfer_tip/language/目录下新建语言包文件
- 使用discuz_application的lang()方法实现动态加载
五、性能优化建议
1. 数据库索引优化:
ALTER TABLE pre_common_credit_log ADD INDEX transtype (operation, relatedid);
2. 缓存机制推荐:
// 使用memcached缓存用户设置
$cache_key = 'transfer_tip_settings_'.$uid;
if(!($settings = memory('get', $cache_key))) {
$settings = C::t('#nciaer_transfer_tip#user_settings')->fetch($uid);
memory('set', $cache_key, $settings, 3600);
}
六、安全防护方案
1. SQL注入防护:
// 使用Discuz原生数据库方法
C::t('#nciaer_transfer_tip#log')->insert(array(
'uid' => intval($_G['uid']),
'dateline' => TIMESTAMP,
'ip' => $_G['clientip']
));
2. XSS防御方案:
// 输出时进行HTML转义
$message = htmlspecialchars(dhtmlspecialchars($message), ENT_QUOTES);
七、浏览器兼容调试技巧
1. 主流浏览器特性适配方案:
/* 通用样式解决方案 */
.transfer-alert {
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
behavior: url(/source/plugin/nciaer_transfer_tip/css/pie.htc);
}
如需进一步技术支援,可访问DZ插件网(www.dz-x.net)开发者社区获取最新SDK及开发文档。遇到复杂问题建议提供以下信息以便快速定位:
1. Discuz版本号
2. PHP版本及运行环境
3. 错误日志内容
4. 问题复现步骤截图
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]