Salve! Volevo fare un sito in Drupal (che ho scoperto da poco e trovo straordinario, vengo da Joomla). Quello che volevo fare era una sorta di blog aperto a tutti, chiunque se si iscrive diventa autore del blog. Certo sarebbe una gran bella confusione se attira molte persone... allora avevo pensato a questo sistema:
- Io mi iscrivo, posso votare gli articoli che leggo (voto da 1 a 9 per esempio), e quando entro in una categoria o sotto-categoria (tutto gestito con il modulo Tassonomia) trovo l'elenco degli articoli relativi al tag che ho scelto. Però questi sono ordinati in base alla mia valutazione, chi ha il voto più alto compare per primo, e poi dopo quelli meno graditi. Nel caso di "parità di voto" l'ordinamento sarà cronologico. (Naturalmente deve esserci anche la possibilità di scegliere ordinamenti diversi, ma mi concentro su questo).
- Primo problema: per avere un ordinamento "su misura per me" dovrei votare TUTTO, e ciascun autore dovrebbe votare TUTTO. Si sottintende che nel database vengano salvati solo i voti degli iscritti (che sono autori), poi però questi vengono ricordati per sempre e relativamente a ciascun contenuto, credo che un modulo in Drupal già faccia questo (ho provato Fivestar ed è ottimo).
- Soluzione: non serve che io voti TUTTO, basta che voti un po', quanto basta per stabilire la mia affinità di valutazione con altri autori, così i miei voti vengono estesi con quelli di autori affini (se col tempo non sono più affini vengono esclusi dall'ordinamento, gli autori che prima lo erano, ovviamente). Ho visto che c'è il modulo Affinity, però è per uno scopo diverso dal mio, è finalizzato per raccomandare un utente all'altro, io invece volevo finalizzarlo per stabilire quali utenti-autori includere per l'estensione dei miei voti. E poi ordinare degli articoli in base alla mia (e affini) valutazione.
- Altro punto: Affinity dopo un certo numero di voti identici dati da diversi utenti, li considera affini. Questa operazione è grossolana nel mio caso, infatti i voti che dovrei dare nel mio sito sono da 1 a 9, c'è gradualità in voti di questo tipo, quindi se uno ha votato 3 e un altro ha votato 8, la differenza è 5. Se uno ha votato 3 e un altro 4, la differenza è 1. Nel primo caso non c'è affinità, nel secondo direi di sì. Bisognerebbe creare un ciclo che passi in rassegna i voti di un autore con i voti di ciascun altro autore (al momento della votazione) e devono esser trovate le differenze, di queste si fa la media, e quella media se è 0 rappresenta affinità perfetta, se è 8 (9 - 1) significa essere agli antipodi.
- Ho fatto delle "prove sperimentali" con VB.NET (linguaggio con cui riesco a far qualcosa) e se due votano assolutamente a casaccio, l'affinità è 3 (nel caso di voti da 1 a 9), ho trovato anche una formula generale: m = N/3 – 1/(3N), dove m è la media tra due autori che votano a casaccio, e N è il numero del voto massimo (nel mio caso 9) e si parte sempre da 1. Ho trovato tutto sperimentalmente quindi non ho motivazioni teoriche da darvi, comunque ad occhio e croce considererei affini due persone che hanno valore di affinità minore di m/2. Cioè nel mio caso minore di 1,5. Questo significa che se la discrepanza media tra le valutazioni di due autori è di un voto e mezzo allora tali autori votano in modo affine.
Ho finito di esporre l'ingrediente fondamentale del sito che ho in mente, mi pare che i moduli esistano solo servirebbe qualche modifica e cambiare alcune finalità. Io purtroppo non ho sufficiente conoscenze in PHP e MySQL per realizzare un simile modulo, qualcuno ha idea di come posso fare? Magari se l'idea piace può darsi che qualcuno abbia voglia di realizzarla. Fatemi sapere, grazie!
Forse sono stato un po' dispersivo... E' possibile semplicemente far sì che il modulo Affinity anziché confrontare i voti e cercarne di uguali, valuti la differenza tra voti (naturalmente questa impostazione ha senso solo per voti che sono valutazioni graduali). Sarebbe già molto, qualcuno sa se è una modifica semplice e fattibile questa? Grazie.
Io abiliterei views, all'interno hai delle views preimpostate tra cui una che intercetta il taxonomy/term/%, la abiliti ed all'interno aggiungi un criterio di ordinamento (il voto medio assegnato dagli utenti), in questo modo dovrebbe fare tutto lui.
per quanto riguarda il modulo affinity non so aiutarti, ma per l'affinità non è una cosa così semplice, vedi per esempio il casini che ha in piedi lastFm per controllare l'affinità di utenti e cantanti... IMHo non puoi esimerti dal doverti sviluppare un codice tuo che probabilemnte dovrà eseguire delle operazioni in batch.
Ciao
Marco
--
My blog
Working at @agavee
Ho abilitato views, attivato taxonomy/term/% e aggiunto un criterio di ordinamento... purtroppo nei Gruppi a disposizione dove poter scegliere dei campi non c'è nulla di relativo alle votazioni. Ho visto che nel database di Drupal c'è una tabella votingapi_vote dove sono registrati l'id dell'articolo, l'id dell'utente e votazione, con pochi altri dati. Dunque il voto medio è calcolato ogni volta? (Non l'ho trovato altrove ma può benissimo essermi sfuggito).
Comunque pare che è necessario costruire un modulo apposta in PHP allacciandosi con MySQL al database, purtroppo ho solo un'infarinatura di questi linguaggi, dovrei studiarmeli, cercherò ancora tra i moduli sperando di trovare qualcosa di vicino a ciò che ho in mente.
Ciao e grazie!
Per inserire le valutazioni anche enl criterio di sorting inserisci una relazione (Relationship) con la tabella di voting, in quel modo doversti poter trovare tra i criteri di sorting anche il voto. Di seguito ti ho inserito il codice della views da importare:
Ciao
Marco
--
My blog
Working at @agavee
Grazie! Purtroppo quando importo il codice mi dice:
Comunque ho capito meglio come funziona views, ho inserito la relazione con voting e sono riuscito a ordinare in base al valore medio tutti i contenuti richiamati con taxonomy/term/ID del termine. Dopo aver smaneggiato "argomenti" e "criteri di ordinamento". Non tutto mi è chiaro, sai se esiste una guida in italiano che spiega il funzionamento di Views?Nulla di completo, se vuoi ci sono un pò di creencast in inglese, ma sono abbastanza comprensibili...
Ciao
Marco
--
My blog
Working at @agavee
Ne ho trovato uno buono: http://www.masteringdrupal.com/screencast/new-features-in-views2/play, son riuscito a capire cose nuove, soprattutto grazie alle immagine.