Programmare una Tag Cloud

Lunedì 20 Febbraio 2006 - 11:55

di Marco Casario

Scripting

Rappresenta una delle maggiori mode del momento. Uno dei primi siti (se non il primo…) a lanciare le Tag Clouds è stato del.icio.us, ma la tecnica ha subito preso piede ed oggi è quasi diventata il simbolo dei siti progettati con un approccio Web 2.0. Cerchiamo di capire meglio di cosa si tratta.

Le Tag Clouds, tanto per capirci, sono quei box che contengono i tag associati ad un entry in un blog, piuttosto che ad un semplice dato, e che a secondo della loro densità di inserimento hanno dimensioni differenti. Per la serie un esempio funziona più di mille parole eccovi un esempio preso dal blog di Peter Freitag.
Perfetto, adesso che abbiamo capito di cosa stiamo parlando, vediamo anche come poter programmare questi “new mullets”, come li ha definiti Jeffrey Zeldman .

Concettualmente il lavoro è molto semplice; si tratta di gestire queste operazioni:

  • ritirare la lista di TAG conservata all’interno del nostro database usando la funzione COUNT() di SQL
    SELECT COUNT(tag) AS myTag, tag FROM tabellaTag GROUP BY tag;
  • calcolare la differenza tra la frequenza massima e quella minima del valore che vi viene ritornato dalla query, dividendolo per un coefficente distributivo (a piacere, a secondo di quante dimensioni diverse dei font si vogliono usare);
  • eseguire il loop all’interno dell’array restituito dalla query e stampare i risultati usando a secondo del valore un CSS diverso;
  • usare i CSS per definire le classi usate;


.moltopiccolo { font-size: xx-small; }
.piccolo{ font-size: small; }
.medio { font-size: medium; }
.grande{ font-size: large; }
.enorme{ font-size: xx-large; }

A questo punto potete scegliere il vostro linguaggio preferito ed applicare questa semplice procedura, ed il gioco è fatto. Avete anche voi il box Tag Cloud :). Peter sul suo blog fa un esempio in Coldfusion:


<cfquery datasource="#dsn#" name="tags">
SELECT COUNT(tag) AS tagCount, tag
FROM tblblogtags
GROUP BY tag
</cfquery>

Calcolo della frequenza:


<cfset tagValueArray = ListToArray(ValueList(tags.tagCount))>
<cfset max = ArrayMax(tagValueArray)>
<cfset min = ArrayMin(tagValueArray)>

Calcolo la differenza:


<cfset diff = max - min>
<cfset distribution = diff / 3>

Loop tra i tag e output:


<cfoutput query="tags">
<cfif tags.tagCount EQ min>
<cfset class=”smallestTag”>
<cfelseif tags.tagCount EQ max>
<cfset class=”largestTag”>
<cfelseif tags.tagCount GT (min + (distribution*2))>
<cfset class=”largeTag”>
<cfelseif tags.tagCount GT (min + distribution)>
<cfset class=”mediumTag”>
<cfelse>
<cfset class=”smallTag”>
</cfif>
<a href=”/tag/#tags.tag#” class=”#class#”>#tags.tag#</a>
</cfoutput>

CSS:


.smallestTag { font-size: xx-small; }
.smallTag { font-size: small; }
.mediumTag { font-size: medium; }
.largeTag { font-size: large; }
.largestTag { font-size: xx-large; }

Tags:

Categoria: Scripting | Permalink

Commenti

1

Certo è che un esempio in PHP o ASP sarebbe stato più leggibile…

# - postato da Andrea - 20 Febbraio 2006 - 12:44

2

Gli step che ho segnalato sono generici ed applicabili a qualsiasi linguaggio.
La tua affermazione dipende molto dal contesto :)

Io capisco di più lo script in Coldfusion, di uno in ASP. ;)

# - postato da Marco Casario - 20 Febbraio 2006 - 12:57

3

Per gli incapaci (nel senso della programmazione :-)) come me, non è meglio utilizzare un servizio tipo http://www.tagcloud.com/ ?

# - postato da Tagliaerbe - 20 Febbraio 2006 - 13:59

4

Però Marco devi anche ammettere che Coldfusion non è comune come asp o soprattutto php :-)

# - postato da Alessio Michelini - 20 Febbraio 2006 - 16:56

5

@Alessio -> proprio perchè non è comune sono ben accetti questi script riguardanti questa tecnologia. E’ veramente difficile trovare script per cold fusion in giro

# - postato da miki - 20 Febbraio 2006 - 22:00

6

Lo so lo so, purtroppo ci devo programmare pure io in coldfusion, e non si trova proprio una mazza…
Però se dev’essere un esempio esplicativo di tutt’altra natura, secondo me era meglio usare un altro linguaggio più conosciuto :)

# - postato da Alessio Michelini - 20 Febbraio 2006 - 23:49

7

Ho riscritto la versione PHP sul mio blog http://www.augustomurri.it/pro.....d-_-in-php

# - postato da Augusto - 21 Febbraio 2006 - 01:44

8

Ciao, come Augusto, anche io ho riscritto la versione ASP sul mio blog http://www.dblog.it/dblog/arti.....ticolo=505

# - postato da Marlenek - 11 Marzo 2006 - 12:01

9

Ragazzi, comunque Coldfusion è fantastico. Si riescono a fare delle cose con una rapidità estrema rispetto ad altri linguaggi. Quindi ben venga il codice codfusion.

# - postato da Antonio - 19 Settembre 2006 - 23:49

10

Ma per chi non ha un blog con la sezione dei tag, come fa a richiamare gli script?
Grazie

# - postato da fabio - 22 Settembre 2007 - 17:07

11

Grazie per la ottima spiegazione della logica. Inoltre avendo fornito un esempio in Coldfusion mi trovo pronto mezzo lavoro.
Comunque adattare la logica che hai spiegato ad un altro linguaggio non mi sembra molto complicato. Saluti
D

# - postato da Davide - 23 Giugno 2009 - 12:10

Inserisci il tuo commento:





(puoi usare i seguenti tag HTML per formattare il testo -
a href, b, i, br/, p, strong, em, ul, ol, li, blockquote, pre):

 

Anteprima del commento