【呆子化雨】浅谈Discuz插件开发-邮件验证提醒插件
插件功能介绍:
这是一款提醒用户验证邮箱的插件,主要是当未验证邮箱的用户访问论坛时,会自动弹出提示框,提醒用户验证邮箱,后台可以设置弹出提示后,是否自动对该用户发送验证邮箱的邮件,设置是否发送邮件后根据用户邮箱自动弹出对应的常用邮箱的登录地址!
首先,贴上邮件提醒插件的核心代码(其实也就这一段而已)!
<?php /***@author 游梦呆子*date 2013-10-30*/ if(!defined('IN_DISCUZ')){exit('Access Denied'); }class plugin_daizi_email_verified{function global_usernav_extra3(){global $_G;$vars_daizi=$_G['cache']['plugin']['daizi_email_verified'];if($vars_daizi[daizi_on]){$email_status=DB::result_first("SELECT emailstatus FROM ".DB::table('common_member')." WHERE uid='$uid'");if(!$email_status){return $vars_daizi[daizi_top_email_verified];}}}function global_footer(){global $_G;$return='';$uid=$_G['uid']?$_G['uid']:'';$vars_daizi=$_G['cache']['plugin']['daizi_email_verified'];if($vars_daizi[daizi_on]){if(!empty($uid)){$email_status=DB::result_first("SELECT emailstatus FROM ".DB::table('common_member')." WHERE uid='$uid'");if(!$email_status && !isset($_G['cookie']['email_verified'])){$return='<script type="text/javascript">setTimeout(function(){showDialog(\''.$vars_daizi[daizi_email_verified_content].'\');},'.$vars_daizi[daizi_email_verified_showtime1].');';$return.='setTimeout(function(){location.href = "/home.php?mod=spacecp&ac=profile&op=password&resend=1";},'.$vars_daizi[daizi_email_verified_sendtime].');</script>';dsetcookie('email_verified',1,$vars_daizi[daizi_email_verified_showtime]);dsetcookie('email_domain',1,100000);}else if(!empty($_G['cookie']['email_domain']) && $_GET['op']=='password' && empty($_GET['resend']) ){if($vars_daizi[daizi_email_verified_target]){$mail_domain = 'http://mail.'.trim(substr(strrchr($_G['member']['email'],'@'), 1));$return.='<script type="text/javascript">setTimeout(function(){window.open("'.$mail_domain.'")},'.$vars_daizi[daizi_email_verified_target_time].');</script>';dsetcookie('email_domain',null);}}}}return $return;} } ?>
再来,贴上插件在discuz后台设计的变量图(其实设计的有点乱,小学语文是数学老师教的!!!)
代码浅谈:
首先,上来肯定是discuz的拒绝非法调用文件的机制!
if(!defined('IN_DISCUZ')){exit('Access Denied'); }
再来,开始插件的核心代码部分!(具体插件怎么命名,怎么定义函数类名,请各位看官看discuz开发技术文档)
function global_usernav_extra3(){global $_G;$vars_daizi=$_G['cache']['plugin']['daizi_email_verified']; //获取插件变量参数if($vars_daizi[daizi_on]){ //判断插件是否开启$email_status=DB::result_first("SELECT emailstatus FROM ".DB::table('common_member')." WHERE uid='$uid'"); //查询数据库,获取邮箱验证字段if(!$email_status){ //判断邮箱是否验证return $vars_daizi[daizi_top_email_verified];}}}
这里其实没什么重点,就是注意查询数据库的时候可以使用DB::result_first($sql);方法来查询,这个方法是获取字段值,同时DB::table($tablename)可以获取table的全称,就是例如我这边的table名是pre_common_header,而我们使用这个方法的话,就可以直接省略前缀,这个方法会自动给你不全!
这个主要是在论坛公共头部,显示验证邮箱的提示!效果如下
接下来就是提示部分代码,也是这个插件的核心了(说是核心,其实也是个很简单的逻辑)
function global_footer(){global $_G; //定义全局变量$_G,这可是个神奇的变量$return=''; //初始化返回值$uid=$_G['uid']?$_G['uid']:''; //$_G['uid']为用户id$vars_daizi=$_G['cache']['plugin']['daizi_email_verified']; //获取插件参数if($vars_daizi[daizi_on]){ //判断插件是否开启if(!empty($uid)){ //判断用户是否登录$email_status=DB::result_first("SELECT emailstatus FROM ".DB::table('common_member')." WHERE uid='$uid'"); //查询数据库,获取用户的email验证字段if(!$email_status && !isset($_G['cookie']['email_verified'])){ //判断用户是否验证了邮箱,同时email_verified这个cookies变量是否定义过了,这个是我自己加的,为了是判断多久提示用户验证邮箱一次$return='<script type="text/javascript">setTimeout(function(){showDialog(\''.$vars_daizi[daizi_email_verified_content].'\');},'.$vars_daizi[daizi_email_verified_showtime1].');';$return.='setTimeout(function(){location.href = "/home.php?mod=spacecp&ac=profile&op=password&resend=1";},'.$vars_daizi[daizi_email_verified_sendtime].');</script>';//上面两句是组合返回的值,返回js代码,主要功能就是弹出验证的提示和发送验证邮件到用户邮箱 dsetcookie('email_verified',1,$vars_daizi[daizi_email_verified_showtime]); //设置cookies的变量email_verified,具体这个变量啥用,上面说了dsetcookie('email_domain',1,100000); //这个设置变量是为了后面判断是否发送了验证邮件}else if(!empty($_G['cookie']['email_domain']) && $_GET['op']=='password' && empty($_GET['resend']) ){if($vars_daizi[daizi_email_verified_target]){$mail_domain = 'http://mail.'.trim(substr(strrchr($_G['member']['email'],'@'), 1)); //截取邮箱@后面的字段$return.='<script type="text/javascript">setTimeout(function(){window.open("'.$mail_domain.'")},'.$vars_daizi[daizi_email_verified_target_time].');</script>';dsetcookie('email_domain',null);}}}}return $return;}
转载于:https://www.cnblogs.com/discuzz/p/3398642.html
【呆子化雨】浅谈Discuz插件开发-邮件验证提醒插件相关推荐
- 计算机应用基础任务化教程笔记,计算机应用基础任务化教程 浅谈计算机应用基础教学中的综合任务...
[摘要]计算机应用基础是中等职业学校的一门重要基础课.此书坚持以"应会"为本质,每章节结束后都会布置综合任务.通过综合任务来培养学生分析问题.解决问题.独立探索.勇于创新的能力.同 ...
- 浅谈sketch插件开发(三)
sketch是什么? sketch是一款用来制作矢量绘图的软件,矢量绘图也是进行网页,图标以及界面设计的最好方式.但除了矢量编辑的功能之外,sketch同样添加了一些基本的位图工具,比如模糊和色彩校正 ...
- 浅谈ASP.NET Forms验证
ASP.NET Forms验证 用户验证是每一个项目必须的一个模块,由于已经很久没有碰到这一块内容,今天写一个用户验证居然脑子一片空白.于是乎就和一个同事进行了一片讨论,晚上回家决定把讨论的结果给记录 ...
- 浅谈html的语义化和一些简单优化,html标签语义化
1.什么是语义化? 必应网典的解释 语义化是指用合理HTML标记以及其特有的属性去格式化文档内容.通俗地讲,语义化就是对数据和信息进行处理,使得机器可以理解. 语义化的(X)HTML文档有助于提升你的 ...
- 浅谈surging服务引擎中的rabbitmq组件和容器化部署
1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...
- 浅谈数学中的化归原则
浅谈数学中的化归原则 泸职院信息工程学院 华卫(1999.6.6) 摘要: 能力比知识更重要:数学教育中使学生掌握数学思想方法,对于促进他们能力的发展至关重要:化归原则是数学中一种很重要的思想方法:本 ...
- 浅谈html的语义化和一些简单优化,浅谈HTML的语义化和一些简单优化
下面小编就为大家带来一篇浅谈HTML的语义化和一些简单优化.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1.什么是语义化? 必应网典的解释 语义化是指用合理HTML标 ...
- 【转】图标字体化浅谈
在做手机端Web App项目中,经常会遇到小图标在手机上显示比较模糊的问题,经过实践发现了一种比较好的解决方案,图标字体化.在微社区项目中,有很多小的Icon(图标),如分享.回复.赞.返回.话题.访 ...
- java双层list扁平化,浅谈java8 stream flatMap流的扁平化操作
概念: Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具.简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以 ...
最新文章
- Codeforces 868F Yet Another Minimization Problem 决策单调性 (看题解)
- spring的aop整理
- leetcode 1293. Shortest Path in a Grid with Obstacles Elimination | 1293. 网格中的最短路径(BFS)
- mybatis内部类映射写法
- Spring Boot下使用JPA报错:'hibernate.dialect' not set的解决办法
- python并发编程2-进程
- 西安openGauss Meetup成功举办,共建最佳学术创新平台
- 【BZOJ1236】KPSUM,记数类问题(乱搞)
- 快速开发基于 HTML5 网络拓扑图应用--入门篇(一)
- 中国基站射频设备行业市场供需与战略研究报告
- Ubuntu 14.04 + nginx + php + mysql + phpmyadmin环境搭建,详细操作
- c语言经典面试题(附答案)
- 防止高考作弊,古今监考老师操碎了心
- 作业五:结对项目-四则运算 “软件”之升级版
- (完全解决)为什么二阶行列式的绝对值为面积
- IcedTea6 1.7.3
- 双系统Win10下装Ubuntu16.04
- Mysql的ClassforName初探
- SSH的远程访问及控制
- Debian系统源码安装usb网卡驱动
热门文章
- 【原理+实战+视频+源码】手撸SpringBoot缓存系统
- DLPack构建跨框架深度学习编译器-实现张量之间的相互转换【pytorch】
- 【深度学习】数形结合的图像处理(文末介绍了一种新型网络)
- 【操作系统】考研の处理机调度算法(看不懂你来打我~!)
- Tensorflow【实战Google深度学习框架】编程基础小漂亮总结
- C++ with STL(一)
- 堆栈 cookie 检测代码检测到基于堆栈的缓冲区溢出_WhatsApp缓冲区漏洞曝光 攻击者可通过MP4文件执行远程代码...
- android 刷卡布局,刷卡布局效果-开源AndroidSwipeLayout使用解析(二)
- (1)搞一搞 seata 之 基础环境搭建
- 上海网络推广为大家讲解细节标签能给网站带来的作用与效果!