代码之家  ›  专栏  ›  技术社区  ›  meds

像这里这样的一个成就系统在PHP中stackoverflow?[关闭]

  •  8
  • meds  · 技术社区  · 14 年前

    从概念上讲,如何使用php和mysql为网站编写一个成就系统?

    唯一真正做到这一点的方法是不断地进行MySQL查询来测试成就等等吗?

    3 回复  |  直到 10 年前
        1
  •  1
  •   Community Mr_and_Mrs_D    7 年前

    你可能想考虑问一个类似的问题 meta 看看 Jeff 愿意分享他在这个舞台上学到的任何教训。如果你这样做了,问题应该是关于如何解决这个问题的。 然而,这个问题对于这个站点来说是一个完全正确的问题(因为它询问的是如何创建一个新项目,这是受在上面所做工作的启发而产生的)。

    不过,我怀疑SO团队的工作是定期运行一组查询,以查找要授予的新徽章,然后再授予它们。这就是为什么在采取行动后不能立即授予徽章。

        2
  •  15
  •   Tyler Carter    14 年前

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

    您可以有一个cron作业,它每隔X分钟运行一次,并在数据库中查看每个用户,并检查他们是否需要一个新的徽章。

    例如,stackoverflow为nice answer徽章实现了这一点。每次它运行,它检查有多少答案与+10以上的投票你,看看你是否需要获得另一个徽章。(它看到5个帖子,10个加分,4个不错的回答徽章,你会得到一个徽章)。杰夫已经说过,这意味着如果你得到一个10票的答案,然后被否决,然后另一个帖子得到10票,你就不会得到徽章。

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

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

    这可以用于您知道正在发生的事件。就像自传者的徽章。很可能用户不会填写他的个人资料,除非按下提交按钮,所以网站可以检查用户是否填写了整个事情,如果他们有,而且他们仍然需要徽章,他们得到它。

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

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

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

        3
  •  2
  •   Vyrotek    13 年前

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