Una tag cloud in ASP .NET

Immagini

Immagine 1 Immagine 2

di Michele Bertoli

Tra gli innumerevoli strumenti che il web 2.0 ha il merito di avere diffuso c’è senza dubbio il tagging.
Un tag (etichetta) non è altro che un’informazione aggiuntiva associata ad un oggetto digitale (sia esso un video, un’immagine o un testo).
Il tagging si è affermato come standard di fatto per moltissime web application e gli utenti hanno risposto in modo positivo a questo fenomeno.
Le etichette associate ai contenuti sono spesso applicate, infatti, dagli stessi fruitori del servizio: come nel caso di Flickr (il celebre portale di condivisione di fotografie) in cui viene data la possibilità di collegare parole chiave ad ogni immagine caricata, al fine di facilitare ricerca e catalogazione.
In altri casi invece sono gli autori a taggare, come ad esempio un blogger che etichetta i propri post inserendoli in determinate categorie.

Parallelamente allo sviluppo di questo tipo di gestione delle informazioni, hanno visto la luce nuovi elementi dell’interfaccia utente atti a rappresentarle.
Tali strumenti innovativi hanno il compito di guidare l’utente agevolando la fruizione dei contenuti.
Uno tra i meccanismi a supporto della navigazione che merita menzione è la tag cloud (nuvola di etichette).

Nell’esempio la tag cloud di Flickr (Immagine 1).

La tag cloud si presenta come un elenco di etichette in ordine alfabetico, la cui dimensione riflette il numero di informazioni associate ad ognuna di esse.
Ogni tag è solitamente rappresentato da un link ad una pagina in cui sono mostrati i contenuti legati al termine stesso. Di fronte ad una tag cloud l’utente può rapidamente farsi un’idea di quali contenuti siano presenti nel sito e in che misura. L’esperienza di navigazione risulta quindi gradevole, mirata ed intuitiva.

In questo articolo vedremo come costruire una nuvola di etichette in ASP.NET e in particolare in C#.

Cominciamo analizzando gli step fondamentali dello script che andremo ad implementare:

- Selezione dal database di una lista composta da due colonne: tag e numero di elementi cui fa riferimento.

- Individuazione del minimo e del massimo numero di informazioni associati alle etichette.

- Creazione della tag cloud proporzionando il font-size di ciascuna etichetta dinamicamente in base al peso.

Ora possiamo dare uno sguardo alla struttura di un database predisposto per il tagging.
Supponiamo ad esempio, in estrema sintesi, che la base dati di un blog sia costruita come da Immagine 2.
A questo punto iniziamo a scrivere il codice.
La prima operazione consiste nel creare un component Literal che avrà il compito di contenere la nostra tag cloud.

  1. <asp:Literal ID=”Literal” runat=”server”></asp:Literal>

Fatto ciò passiamo al C#.
Innanzitutto creiamo una connessione al database e dichiariamo le prime variabili.
  1. using (OleDbConnection connection = new OleDbConnection(connectionString))
  2. {
  3. string selectCommand;
  4. OleDbDataAdapter adapter;
  5. DataSet dataSet;
  6. double fontSize;
  7. int numberOfPostsMin;
  8. int numberOfPostsMax;
  9. int numberOfPostsDiff;

In secondo luogo andiamo a definire le variabili fontMin e fontMax che indicano rispettivamente la dimensione minima e massima che avranno le etichette all’interno della nuvola.
  1. int fontSizeMin = 10;
  2. int fontSizeMax = 30;
  3. int fontSizeDiff = fontSizeMax - fontSizeMin;

Poi interroghiamo il database con lo scopo di ottenere un risultato formato da due colonne: il nome del tag e il numero di post cui esso è associato, ovvero il “peso” che determinerà la rilevanza nella nuvola.
E’ necessario ordinare la lista in base al nome e inserirla in un DataSet.
  1. selectCommand = “SELECT Tag.Name, COUNT(TagMap.Id) AS NumberOfPosts “ +
  2. “FROM Tag INNER JOIN TagMap ON Tag.Id = TagMap.TagId “ +
  3. “GROUP BY Tag.Name “ +
  4. “ORDER BY Tag.Name”;
  5.  
  6. adapter = new OleDbDataAdapter(selectCommand, connection);
  7. dataSet = new DataSet();
  8. adapter.Fill(dataSet, “Tag”);
  9. adapter.Dispose();

Il penultimo step consiste nel ricavare il minimo e il massimo numero di post al quale un’etichetta è associata. Questi valori sono indispensabili per il calcolo successivo.
  1. numberOfPostsMin = Convert.ToInt32(dataSet.Tables[“Tag”].Compute(“Min(NumberOfPosts)”, null));numberOfPostsMin = Convert.ToInt32(dataSet.Tables[“Tag”].Compute(“Min(NumberOfPosts)”, null));
  2. numberOfPostsMax = Convert.ToInt32(dataSet.Tables[“Tag”].Compute(“Max(NumberOfPosts)”, null));
  3. numberOfPostsDiff = numberOfPostsMax - numberOfPostsMin;

Finalmente siamo pronti per effettuare un ciclo sull’elenco dei tag calcolando, per ognuno, la dimensione proporzionata da attribuire ad esso nel markup tramite la proprietà font-size.
  1. foreach (DataRow dataRow in dataSet.Tables[“Tag”].Rows)
  2. {
  3. fontSize = fontSizeMin + (((Convert.ToInt32(dataRow[“NumberOfPosts”].ToString()) - numberOfPostsMin) * fontSizeDiff) / numberOfPostsDiff);
  4.  
  5. Literal.Text += String.Format(“<a href=’search.aspx?q={0}’ style=’font-size:{1}px;’>{0}</a> “,
  6. dataRow[“Name”].ToString(),
  7. Convert.ToInt32(fontSize));
  8. }
  9. }

Lo script è completo e pronto per essere implementato nella vostra applicazione .NET

Potrete così migliorare l’esperienza dei vostri utenti offrendo una navigazione semplificata grazie alla tag cloud.

____________________________________________________________

Michele Bertoli
michele@havana7.com
Studente all’università Cattolica del Sacro Cuore con 5 anni di esperienza alle spalle nello sviluppo di software gestionali multipiattaforma. Ama progettare e realizzare servizi Web 2.0,
imparare nuove tecniche di programmazione e cimentarsi nella sperimentazione di sistemi di comunicazione evoluti come i social network.