2006年11月11日更新
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
5.插件制作过程(三)论坛后台增加插件现在我们开始在后台增加我们的红包插件
5.1.进入论坛的后台(系统设置)-扩展设置—插件管理—新增—插件名称—唯一标识—提交,见图001
插件名称:插件的中文名字,也可以是其他语言,不过我是中国人只写中文,名字最好通俗易懂便于理解,例如:社区红包。
唯一标识:插件的英文代码,没办法计算机程序是外国人写的,必须遵守他们的规矩,唯一标识最好是翻译插件名称。例如:社区红包——hongbao
图001
5.2.编辑插件 - 社区红包 (点击插件后面的详情),见图002
版权信息(copyright):这个信息只要填写了,之后就不能修改了,当然,没有太多的用处,随便写一个就OK了.
后台权限等级:这是设定谁可以管理插件设置里的插件!一般当然是管理员,除非你有后台模块需要版主帮你管理!
插件目录:就是放插件程序地方,./plugins/这个文件夹在根目录下,如果插件多了文件一大堆分不清文件是那个插件的就不好了!所以要在这个目录下做个插件的文件夹。这里我们就建立一个hongbao文件夹,别忘了hongbao/后面有个斜杠的符号
插件数据表:这个是discuz在备份数据库的时候,会把插件的数据库一起备份了,按照上面程序的设计,有两个数据库表,我们填写plugins_hongbao_info,plugins_hongbao_log
插件描述:地球人都知道,插件作用的简单描述!
图002
之后提交就可以了!填完这些那么你就创建了一个插件,但是这是不过是表面文章,接下来我们继续创建插件!
5.3.添加模板和PHP文件
在进行插件模块和自定义菜单之前,我们先要建立插件所使用的php文件和模版文件
首先看一下discuz的根目录文件夹,如图003
图003
5.3.1.在根目录—plugins文件夹下—创建hongbao文件夹(这就对应了前面插件目录的填写),如图004
图004
5.3.2.在hongbao文件夹里创建hongbao.inc.php文件,如图005
图005
为什么文件的命名有inc呢?
引用:
文件命名规范
[B]Discuz! 按照如下的规范对程序和模板进行命名,请在设计插件时尽量遵循此命名规范:[/B]
1.可以直接通过浏览器访问的普通程序文件,以 .php 后缀命名。
2.被普通程序文件引用的程序文件,以 .inc.php 后缀命名。
3.被普通程序文件,或引用程序文件引用的函数库或类库,以 .func.php(函数库) 或 .class.php(类库) 后缀命名。
4.模板文件,以 .htm 后缀命名,模板文件只存在于 ./templates 目录中。
5.模板语言包文件,以 .lang.php 后缀命名,语言包文件只存放于 ./templates 目录中,与模板文件同级目录。
6.被编译后的模板文件,以 .tpl.php 后缀命名,前面的数字是模板套系的 ID,下划线后面的是模板原名,编译模板文件只存在于 ./forumdata/templates 目录中。
7.动态缓存文件,存放于 ./forumdata/cache 目录中,依据不同的功用进行独立的命名。
8.使用后台数据备份功能生成的备份文件,通常以 .sql 为后缀,存放于 ./forumdata/ 目录中。
9.有些目录中存在内容为空白的 index.htm 文件,此类文件是为了避免 Web 服务器打开 Directory Index 时可能产生的安全问题。
5.3.3.在./templates/default/——创建hongbao.htm
好了这样我们就做好了创建插件的准备工作!
5.4.创建菜单链接—插件模块和自定义菜单如图006
图006
程序模块:这个是指./plugins/hongbao/hongbao.inc.php这个文件,我们已经做好了,所以填写hongbao
菜单名称:这是指前台的菜单显示,很多人问插件菜单名怎么变红色=>
复制内容到剪贴板
代码:
<font color=red>申请红包</font>填这个就行,这里你学到了第一句HTML语法:<字体设置 颜色参数=颜色代码>文字<围堵标记>,其中的颜色代码可以是16进制代码也可以固定英文代码例如:red 也就是#FF0000 你用百度搜索颜色代码表到处都是啦!
模块类型:引用:
插件模块和自定义菜单:
插件接口默认提供四种可选的模块方式:
1.直接链接(前台菜单):可在前台右上角加入一个菜单项,可自主指派菜单链接的 URL。注意:由于引用外部程序,因此即便设置了模块的使用等级,您的程序如需权限判断,仍需要引用 common.inc.php 和插件相关的缓存文件(将在后面的《参数读取与缓存控制》中详细说明),并自行判断使用等级是否合法;
2.前台调用(前台菜单):与直接链接类似,但其调用的是插件的一个模块,模块文件名指派为“./plugins/插件目录/插件模块名.inc.php”,由 plugin.php 调用此模块,调用 URL 将在后面的《编写插件的原则与注意事项》中详细说明;
3.后台调用(后台菜单):可在后台插件设置中为此插件增添一个管理模块,模块文件名指派为“./plugins/插件目录/插件模块名.inc.php”,由 admincp.php 调用此模块,调用 URL 将在后面的《编写插件的原则与注意事项》中详细说明;
4.包含运行(无菜单):可设置一个在论坛所有页面均包含运行的脚本,此脚本在 ./include/common.inc.php 中加载,脚本文件名指派为“./plugins/插件目录/插件模块名.inc.php”。请注意,为了不导致错误的插件影响论坛运行,在 common.inc.php 加载此模块时,屏蔽了错误信息,因此请务必仔细检查是否存在语法错误,任何微小的语法错误都将不被提示出来,并且导致此模块不被正常加载。如果您配置了不正确的包含脚本而导致论坛系统设置无法使用,删除服务器上相应的脚本文件即可解决。
您可以为每个模块设置不同的使用等级,例如设置为“超级版主”,则超级版主及更高的管理者(例如论坛管理员)可以使用此模块。
看到了应该很简单前台文件、后台文件、调用外部文件、初始化文件!就这四种!那么一般的插件文件当然是前台调用
这里要说明一个调用问题,文中多次说到./include/common.inc.php是否加载,也就是说加载了这个文件,你就可以轻松的得到会员名、会员uid、会员的积分信息、论坛的分类、各级会员组用户组信息,简单说就是汽车加了汽油你可以开了,前后台调用都加载了这个文件;包含运行是把程序写入这个文件;前台链接没有加是需要你另外添加的!
使用等级:不用说了给谁用的!
[
本帖最后由 xuesharp 于 2006-11-27 11:39 编辑 ]