2012-04-05 12 views
16

Sto cercando di implementare una cosa simile ai badge stackoverflow. potresti anche identificarli con i risultati ottenuti nei giochi.badge/obiettivi

ma non sono sicuro come progettare il database/codice/tracciamento per loro.

ottengo che cosa devo fare per badge quali:

Altruista × 1456 Prima di taglie si assegnato manualmente su domanda di un'altra persona

perché sono un evento di una volta, ma come gestire altri come:

× analitica 16389 Visitato ogni sezione della FAQ
Elettorato × 1783 Votato 600 le domande e il 25% o più dei voti totali sono questioni Schietto × 188 Pubblicato 10 messaggi in chat che sono stati interpretato da 10 utenti diversi

ecc ...

come gestirli, come mantenere traccia dei progressi per ciascuno, ecc. c'è un tutorial o qualcosa che può aiutarmi a capire un modello di progettazione per loro?

risposta

17

Per gli esempi forniti, ci sono essenzialmente due meccanismi di cui avrete bisogno.

Non so come sia fatto su SO, questo è solo un suggerimento di una soluzione.

Diamo un'occhiata a "Analitici". Dovrai registrare per mezzo di una semplice bandierina quando un utente visita una determinata area nelle FAQ. Immaginiamo una tabella DB con un campo per ogni sezione FAQ e un ID utente. Questo inizia come "N" (o 0, o comunque vuoi rappresentare la tua bandiera). Quando un utente visita quell'area, chiami il codice per girare quel campo su "Y". Quando tutti i campi sono "Y", puoi assegnare quel badge.

Per quanto riguarda "elettorato" e "Outspoken", è possibile recuperare queste informazioni mediante una query sui dati esistenti, assumendo che le query non siano troppo onerose. Dovrai considerare quando eseguire questi controlli. Questo essenzialmente si riduce a due opzioni.

1) Quando si esegue l'un'azione che potrebbe avere un badge assegnato (vale a dire la sezione visita di FAQ, Voto su una domanda, domanda preferiti da qualcun altro)

2) Periodicamente (ogni ora, ogni giorno, ecc) eseguire un controllo per tutti i badge contro i dati attuali.

Tenere presente che i badge sono a senso unico in StackOverflow, quindi se si desidera essere equivalenti, non è necessario considerare la logica per i badge "non assegnati".

+0

penso di averlo capito ora. sembra facile: P un solo problema - tu dici per 'analitico' di usare una tabella db, ma ci saranno molti distintivi simili e come andrei in giro per ognuno di essi? dovrei usare una tabella diversa per ogni badge, o c'è un modo per unificarlo in un unico tavolo? altrimenti potrei finire con un sacco di tabelle db, una per ogni tipo di badge ... ma per la risposta - mi aiuta molto a farmi iniziare nella giusta direzione. btw, il tuo 2 significa che i badge non vengono premiati nel momento stesso in cui vengono raggiunti, giusto? e sì, non ci sarà nessun premio. – b0x0rz

+1

Il modo in cui implementi il ​​tavolo dipende da te.Potresti avere una tabella di 4 colonne con user_id, badge_id, badge_acheivement_id, flag - Questo lo renderebbe scalabile a più badge. E, sì, significa che non dovrebbero essere premiati nel momento stesso in cui sono stati raggiunti. –

+0

ovviamente :) grazie. penso che questo risolva tutti i miei problemi. Immagino che pianificare gli assegni abbastanza spesso sia una possibilità per ridurre il divario di tempo tra "guadagnare" il badge e il badge mostrato. – b0x0rz