论坛程序中,用户勋章 是如何设计的?手动发放?自动获取?

华兹格 发布于 2013/10/03 19:05
阅读 1K+
收藏 1

最近对论坛系统的用户勋章设计比较感兴趣,就想探讨一下用户勋章是如何设计的。逛了好多论坛,用户勋章的获取有的是通过申请,有的是达到级别后,过一段时间发放,还有的是自动获取。

请问,我如果想开发个论坛,让用户自动获取勋章,该如何实现?

比如:

1.新生勋章:用户发表了一个帖子;

2.活跃勋章:用户累计发布了50个帖子;

3.环保勋章:用户发表含有“#爱好环境#”主题的帖子……

我想,如果能达到用户自动获取勋章的目的,而勋章获取的资格又是多种多样的(帖子数、主题),这么多维度,该如何设计呢?我有一个笨办法,也是最危险的办法就是通过sql来做:

列名

类型

约束

描述

medal_id

tinyint

unsigned not null

 

勋章编号

medal_name

varchar(10)

not null

 

勋章名称

medal_img

varchar(200)

not null

 

勋章图标

medal_intro

varchar(60)

not null

 

勋章说明

medal_case

varchar(60)

not null

 

勋章获取条件(sql语句)

cdt

int

unsigned not null

 

创建时间

但这样做,需要对sql很懂的操作员才行,感觉这种办法太笨了。。。请问有大牛设计过这样的系统吗?有没有好的解决方法?



加载中
0
卫慧杰
卫慧杰

以前写一个问答平台的时候做过这个东西

就是固定的事件触发就可以了!

比如连续登陆7天获得一个勋章。那么每次登陆都触发这个事件检查这个用户是否连续登陆过7天。

验证 Email 获得勋章就是验证 Email 的事件了。

非公开程序就写死到代码上,有新勋章就加新事件

公开程序就不要写死。任何动作都加事件钩子,然后在后台自定义规则,这个就很复杂了,需要做好设计!

0
taowang
taowang

只说php的做法。

medal_case 不要保存sql语句,类似discuz他们的做法,保存一个php的表达式,一般用户登录后都有个类似的 Member的全局变量保存用户的一些信息(比如发贴总量、今日发帖、本月发帖、登录时间等等),php的话,你完全可以在medal_case存入一个 $member['posts'] == 50(发50个贴的表达式)然后eval()这个表达式,得到bool,true就进入发勋章模式,不是就跳过去。大概思路就这样。


华兹格
华兹格
php可以使用eval(),可是Java语句好像不支持。不过为了支持傻瓜式操作,我做了个对用户是友好型的操作:添加 触发类型(总数、主题包含##)、值、最低数量 等条件,这样还是生成sql-case,然后通过数据库查询。。。
0
子苓
子苓
建议跑批,定期运行
华兹格
华兹格
这个也挺好~~~哈哈,定时执行,节省了系统开销
0
欣儿
欣儿
建议去研究下dz的勋章插件,如果要设计,不会这样去想。觉得可以先把表设计好,其他获得勋章的过程只是一个action,而后台要做的是是否开启。如果想要自己添加获得的方法,留个添加的后台就完啦。固定的直接后台设定,增加一个表来保存设置的情况,比用sql要好吧,到什么可以获得可以设置为触发的那种
华兹格
华兹格
不明觉厉
0
南湖船老大
南湖船老大

eval。。。好龌龊的做法,有什么值得推荐的呢。

mysql下炮哥存储过程+event定时任务岂不更好。Java有quartz也可以跑定时任务

0
名字是什么能吃吗
名字是什么能吃吗
用反射 数据库里存属性名称和判断的值 在某个条件下执行一次
华兹格
华兹格
我基本赞同你的观点:)
返回顶部
顶部