像这里的stackoverflow在PHP中的成就系统?

时间:2010-04-08 14:27:15

标签: php web

从概念上讲,如何使用PHP和MySQL为网站编写成就系统?

唯一真正的做法是不断进行MySQL查询以测试成就等吗?

3 个答案:

答案 0 :(得分:15)

您有两种选择,最有可能将它们组合在一起:

您可以拥有一个每X分钟运行一次的cron-job,并在数据库上运行,查看每个用户并检查他们是否应该获得新徽章。

例如,StackOverflow为Nice Answer徽章实现了这一点。每次运行时,它都会检查您拥有+10个投票的答案数量,并查看是否需要获得另一个徽章。 (它看到5个帖子有10个upvotes和4个Nice Answer Badges,你会得到一个徽章)。杰夫已经表示,这意味着如果你得到一个得到10票,然后投票,然后另一个帖子获得10票的答案,你就不会获得徽章。

第二个选项是基于事件的触发器。这真的很简单:

$badgeSystem->giveBadge("Some Badge Name", $User_ID);

这可用于您知道正在发生的事件。就像Autobiographer徽章一样。除非按下提交按钮,否则用户将无法填写他的个人资料,因此网站可以检查用户是否填写了整个内容,如果他们有,并且他们仍然需要徽章,他们就会得到它。

cron-job应该用于经常检查的操作。比如定量目标,比如访问网站150天,或编辑500次。

只有在用户执行特定操作(例如提交表单)时才会发生事件,才会发生基于事件的触发器。

(你几乎可以在任何情况下使用。基于事件的触发器可以提供更快的反馈......)

答案 1 :(得分:2)

另一种选择是使用来自游戏化平台公司的API,例如http://iactionable.com

答案 2 :(得分:1)

您可能需要考虑在meta上提出类似的问题,看看Jeff是否愿意分享他在这个领域中学到的任何经验教训。如果你这样做,问题应该是关于SO处理问题的方式。 然而,这个问题对于这个网站来说是一个非常有效的问题(因为它询问创建了一个新项目,受到SO上所做的启发)。

但是,我怀疑SO团队有一份工作,定期运行一系列查询来寻找新的徽章,然后奖励他们。这就是为什么在采取行动后不立即颁发徽章的原因。