si hanno due opzioni, e molto probabilmente li possono combinare:
Si può avere un cron-lavoro che viene eseguito ogni X minuti, e corre sul database a guardare l'controlli utente e se meritano una nuova distintivo.
Ad esempio, StackOverflow implementa questo per il badge Risposta piacevole. Ogni volta che viene eseguito, controlla quante risposte hanno +10 upvotes e vede se è necessario ricevere un altro badge. (Visualizza 5 post con 10 upvotes e 4 Nice Answer Badge, ottieni un badge). Jeff ha già affermato che questo significa che se ottieni una risposta che ottiene un voto di 10, poi ha downvoted, e quindi un altro post ottiene 10 voti, non riceverai un badge.
La seconda opzione è trigger basati su eventi. Che sono davvero semplicemente:
$badgeSystem->giveBadge("Some Badge Name", $User_ID);
Questo può essere utilizzato per eventi che si sa stanno accadendo. Come il distintivo dell'autobiografo. È probabile che l'utente non compilerà il suo profilo a meno che non venga premuto il pulsante di invio, quindi il sito potrebbe semplicemente verificare se l'utente ha compilato l'intera operazione, e se lo hanno, e hanno ancora bisogno del badge, lo ricevono.
Il cron-job deve essere utilizzato per le azioni che vengono costantemente controllate. Cose come obiettivi quantitativi come visitare il sito per 150 giorni o modificare 500 volte.
Il trigger basato su evento deve verificarsi quando un evento si verifica solo se l'utente esegue un'azione specifica, ad esempio l'invio di un modulo.
(Probabilmente si potrebbe utilizzare uno per quasi tutte le situazioni. Il trigger event-based fornisce un feedback più veloce però ..)
fonte
2010-04-08 16:18:12
i "Dico che era l'unico vero modo di farlo, dal momento che avresti bisogno di essere in grado di tenere traccia di quali risultati sono già stati raggiunti. – studioromeo
Dato che stiamo parlando a livello concettuale, non penso che questa domanda abbia qualcosa a che fare con MySQL o PHP. – pkaeding
PHP e MySQL hanno limitazioni, nello sviluppo del gioco ho un motore che ha un sistema di eventi, tutto quello che devo fare è ascoltare i risultati per determinare se c'è stato un risultato raggiunto. È setoso ed efficiente, ma non può essere fatto in php in modo efficiente. – tweetypi