频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> CMS 专区 -> discuz! -> 一个插件的编写过程,社区红包For5.0[11/11更新]

一个插件的编写过程,社区红包For5.0[11/11更新]

作者:jz123  来源:www.jz123.cn  发布时间:2006-11-16 13:48:42  发布人:jz123

减小字体 增大字体

昨天看到一个哥们说插件的教程太少,今天正好准备写个插件,就把整个过程写下来...
其实我对插件的制作也是刚刚开始,使用php的时间也不长,有很多都是尝试着弄得,有不会的地方都是在baidu或google上搜索,
里面肯定存在一些不是十分理想的地方,请各位老鸟能够帮助,各位菜鸟共同进步!
还有,就是从第一贴开始,我才开始做这个插件,时间可能会比较久,如果大家有什么建议和意见,或者我有不能搞清楚的地方,请大家帮助!

在开始之前,让大家先关注几个帖子
第一个是关于php和mysql的基础文章,mastermind007PHP & MySQL 初级教程,这个文章比较长了,如果有一定基础的朋友可以跳过,而基础薄弱的朋友就该看看了,也许比较枯燥,但是没有基础肯定是不行的了.
第二个是关于正则的,在插件的设计开发过程中,难免有些需要到正则的地方,泡哥如何能提高插件编写能力(一)这个帖子讲的就比较清楚了,当然有时我们可以直接拿别人的正则过来直接就使用了,说实话,我经常就是这样,不会写,但是一定要会改!
第三个文章还是泡哥 的,玩转Discuz!——七天学会插件制作!,虽然更新没有完成,但是在我的这篇文章之前,一定要看看这个文章,这个图文并茂的教程挺不错的,而且讲解的十分透彻..
第四个是sw08 (老龙)[资料库]DZ程序文件目录含义整理表,这篇文章有助于我们寻找一些程序原有的文件,这样有的时候我们可以看看官方在某些细节上是如何处理的,有助于我们自己的学习..
第五个还是关于DZ的,就是M55 斑斑的收集 DZ 全局变量、常量以及数组名称及说明,这里收集了常用的DZ的变量和数组,便于我们的使用.PS:希望M55斑斑的眼疾早日康复!
最后一个也是相对重要的,是关于插件的安全问题的,是cnstudent插件安全如何保证(FOR 插件作者版),DZ的安全性由官方来保证,但是千万别因为插件的安全问题,影响了整个论坛啊,而且你个人编写的插件是公布源码的,如果高手轻易的找到了漏洞,那使用这个插件的朋友就遭殃了,搞不好就成了旁注的大门...所以还是尽量的保证插件的安全性....

QUOTE:

现在我遇到的问题:
1.我现在需要一个"我要领取红包"字样的按钮,请哪位仁兄帮做一个,PL一点的,谢谢~~!2006年11月11日
好了,下面就开始我的正式内容.

2006年11月10日更新
1.插件简介
a.插件名次:社区红包
b.插件类别:积分类
c.插件说明:由管理员添加于特定日期给予论坛会员发放论坛扩展积分作为奖励(特定日期为春节,五一,十一,情人节,圣诞节......)
d.插件优势:相对于过去使用银行的发放节日奖励方式,要求会员在特定的日期内登录社区,才能领取奖励.

2.插件功能创意
a.可定制奖励积分的扩展积分项
b.可定制红包内钱数(可选择固定值或随机值)
c.管理人员可设置为普通会员的N倍
d.可以限制红包的总数量,意思就是先到先得,后到没有
e.可以通过领取红包者的注册时间和积分底线,防止马甲领取

3.插件制作过程(一)数据库部分
如果没有修改过表前缀的话,我们设计的数据库表以cdb_为前缀,这个插件我们需要2个数据库表,表的命名方式尽量应该明确,且与原论坛的表有明显的区分,我个人在开发的过程中习惯把数据库表名定为cdb_plugins_XXX_YYY的格式,(XXX为插件名,YYY为插件中某具体用途的表)
插入一个关于插件名的问题,当然也涉及到整个插件中的变量等命名的规则,插件的名字最好使用大家都熟悉的英文,实在不知道英文,就使用拼音好了,例如这次的红包插件,我就把插件的名字定为hongbao,在插件中的变量,也尽量使用此名次开头的变量,便于区分.
进入正题,我们开始考虑这个红包需要的数据库表
a.红包信息表,表名cdb_plugins_hongbao_info (好像比较长,但是看上去就很明确了,前缀_插件_插件名_信息)
该表需要记录哪些字段呢?
hid,红包的id,这个是表的主键,几乎每个数据表都有这么字段,自增型,int(10)
hname,红包名称,所发放红包的名称,一般这个不会太长,varchar(30),not null
hexplain,红包说明,红包的介绍,
hstart,红包开始发放时间
hend,红包发放结束时间
hcredits,红包对应扩展积分
htype,红包类型,固定值或随机值,1=随机;0=固定
hnummin,红包最小值
hnummax,红包最大值
hrand,论坛管理人员红包倍数
hregdeny,注册时间限制
hpostsdeny,发帖数量限制
hcreditsdeny,用户积分限制值
htimesdeny,红包个数限制
hgettimes,红包领取次数
hgetnumcount,红包已发放数额
hishide,红包是否隐藏,用途是如果期次太多,就将已过时间很久的红包信息隐藏,在前台不显示.1=隐藏;0=显示

b.红包领取日志,表名cdb_plugins_hongbao_log
hlid,红包日志id
hid,红包id
uid,领取者id
hltime,领取时间
hlnum,领取值
hlip,领取者ip

数据库的设计暂时这样,这个只是初步定的,数据库的字段还有可能变化,要在插件开发的过程中看看还有没有什么变化.
这里看到的并不是通常插件开发人员提供的sql语句,因为在这里并没有创建数据库,只是数据库结构的设计,包括字段的类型和长度都在设计后确定.
4.插件制作过程(二)插件功能流程设计
a.管理人员管理红包功能,这里需要个比较普通的页面即可.没有什么特殊的东西,主要是防止管理人员录入的数据发生错误,会有较多的判断.该部分会在后面详细介绍.
需要的页面:增加,编辑,删除(注1:添加红包时应考虑2个红包的发放时间是不允许有重合部分的.可考虑人工提示或程序控制,如果技术可以达到的,就靠程序来控制)
b.会员前台的红包插件页面
b1.首先是把取出所有的红包信息(注2:条件hishide=0)
b2.循环,将当前的当前时间timestamp与红包发放的开始hstart和结束时间hend对比(注3:类似这种与时间有紧密联系的插件,一定要考虑用户时差timeoffset的问题)
b2.1 timestamp>hend 红包已发放结束
b2.2 hend>timestamp>hstart 红包发放中,当有此情况时,置变量hongbaonow为1,供模版判断是否显示领取红包按钮用.
b2.3 timestamp<hstart 红包发放未开始
c.会员领取红包功能,这里是核心功能了,流程相对复杂(其实是比较简单的,主要都是一些判断)
c1.根据红包id,取该红包的所有信息,如果id不存在,提示错误.
c2.为防止有人通过链接直接访问红包领取页面,仍要再次判断是否hend>timestamp>hstart,否->领取失败,时间错误(注4:这里的语言为暂时使用,程序中会使用一些比较客气的话!)
c3.是否设置了红包个数限制htimesdeny,如果设置是否htimesdeny>=hgettimes,是->领取失败,红包已发完
c4.查询当前用户是否已经领取过本次红包,查询表cdb_plugins_hongbao_log中是否存在uid='$discuz_uid' and hid='$hid',是->领取失败,已领取过.
c5.是否设置了 注册时间限制hregdeny 或 发帖数量限制hpostsdeny 或 用户积分限制值hcreditsdeny ,是->c6 否->c7
c6.取当前用户信息"SELECT regdate,posts,credits FROM {$tablepre}members WHERE uid='$discuz_uid'",判断用户是否符合领取条件.
c7.所有判断已通过,根据红包类型htype,得到用户置变量用户本次红包数量hongbaoget htype=0 ->hongbaoget=hnummin ; htype=1 ->hongbaoget=rand(hnummin,hnummax)
c8.判断用户是否为管理员组,是->hongbaoget=hongbaoget*hrand
c9.将领取日志写入表cdb_plugins_hongbao_log,并更新表cdb_plugins_hongbao_info的红包领取次数hgettimes和红包已发放数额hgetnumcount
c10.*考虑是否发生短消息
c11.提示领取成功,返回插件首页.

今天说的是流程设计,由于我不是一个真正的程序员,所以有些东西并不是很清楚,我想跟大家说的是一个概念.
1.流程中都应该考虑些什么事情,应该尽可能多的想到各种各样的情况,甚至应该是想到所有可能发生的情况.
2.关于数据库的查询,我觉得应该使用尽可能少的查询次数.而且流程是有先后顺序的,如这次流程中的c2,c3,c4,c5,顺序看起来是无所谓的,举个简单的例子,如果c3和c4换了位置,假设我们设置了红包的个数是100个,当用户领取次数达到100后,程序就会先执行在c3之前的c4,取log表中的信息,用数字的方法表达应该更加明确一些,在上述情况下c3在c4前出去DZ自己默认的查询,插件的查询次数是1次,而如果c4在c3前,查询次数是2次.
  不知道关于这个问题我解释的是否清楚,只是根据我的理解应该是这样.
  如果不考虑查询次数的话,我倒是觉得c4和c5都应该在c3之前的....
  关于类似的流程,大家也可以看看我之前的一个插件,里面有很详尽的注释,那个插件的判断过程比这个多很多,希望你能有些收获.
http://www.discuz.net/thread-437163-1-2.html

将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· 页面自动刷新,不用按回..
· 用FW制作仿真软盘效果(4..
· Photoshop简单为照片绘制..
· 电子商务产生新模式 114..
· 用Dreamweaver制作动态连..
· 初学者好知识:MYSQL常用..
· ASP 验证码的程序及原理..
· Dreamweaver网页制作技巧..
· 如何提高网站的转换率?
· 新浪奥运营销战略高调亮..
· CNNIC发布互联网统计报告..
· Dreamweaver 4 简明教程..
· 30万家网站将贴上“诚信..
· 上海网络游戏打"中华牌"..
· 从ASP调用SQL中的图像(..
· 用RecordSet实现分页(by..
相关文章
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号