UI pour l'affichage en taille variable des Tags

Bonjour,

Sauriez-vous m’indiquer un projet ou un bout de code, basé sur
acts_as_taggable. (version DHH ou l’autre) qui affiche les Tags en
taille variable. ala del.icio.us

J’ai déjà implémenté ça, mais je suis pas trop satisfait de mon code,
il fonctionne mal avec peu de tags et ne comporte aucun inject :slight_smile:

Merci.

j’ai un bout de code a la maison que j’ai troouvé sur le net. Je la
posterai
ce soir si tu es interessé.

En attendant , il me smeble que Google donne des resultats en cherchant
tag
cloud et rails.

Voila HTH

j’ai un bout de code a la maison que j’ai troouvé sur le net. Je la posterai
ce soir si tu es interessé.

C’est gentil de ta part.

En attendant , il me smeble que Google donne des resultats en cherchant tag
cloud et rails.

‘cloud’ ça m’aide. Je vais regarder…

On 8/2/06, Guillaume G. [email protected] wrote:

j’ai un bout de code a la maison que j’ai troouvé sur le net. Je la posterai
ce soir si tu es interessé.

Je t’assure que j’ignorais que c’était une question à 9.99 $US

http://www.oreilly.com/catalog/tagclouds/index.html?CMP=ILC-J04X34597568

guillaume garcera a écrit :

Bon le code n’est pas de moi j’ia trouvé ca dans les source de l’un des
projet des railsday2006
Marrant ca. A partir de trucs recuperes a droite a gauche et quelques
nouvelles idees,je bosse avec un ami sur sharette, un outil de partage
de fichiers pour une association. Tout n’est pas fini (et ca se voit
vite aux textes et au design, hin hin), mais on a entre autre code une
recherche dynamique dans le tag cloud (seul concept nouveau avec le
last_n qui permet d’obtenir les n derniers ajouts du site en ajax ;
d’ailleurs si vous savez comment un observer peut rafraichir la vue
seulement quand on arrete de taper au clavier dans le champ pendant 1sec
par exemple, ca m’interesse).
La “chose” est visible sur http://sharette.sitlib.org/, il reste qqs
problemes (petits fichiers qui sont gardes en memoire au lieu d’etre
stockes dans /tmp/ pas pris en compte, notamment), et des choses pas
implementees (liste des n derniers elements n’affiche pas assez d’info,
pas encore possible de lister ce qu’il y a dans un tag, ni de voir ses
propres documents, la suppression d’un document n’entraine pas la
suppression du fichier cote serveur, il faut des-ajax-iser la procedure
de login/logout), mais le code doit pouvoir etre “interessant” pour un
debutant et sera vite ameliore (vite dans le sens ou ca ne demande pas
beaucoup de travail, pas dans le sens ou on le fera rapidement…). Pour
vraiment tester, il faut au moins se creer un compte, deposer un fichier
type photo (histoire que ce soit assez gros), en modifier apres coup les
champs (in_place_editor), et jouer avec la page d’accueil :wink:
Ah, il manque aussi les tests unitaires… pas eu le temps de regarder
dans le detail comment ca marche.
svn co http://sitlib.org/svn/sharette/trunk' pour recuperer la source d'un coup ou baladez-vous directement sur http://sitlib.org/svn/sharette/trunk Notez bien qu'on a un peu modifie le vendor acts_as_taggeable’ (c’est
pas propre, parce que les mises a jour ne sont plus possibles, mais
c’est notre premier projet).
Si des gens veulent contribuer (test unitaires, nouvelles
fonctionnalites, un vrai CSS, une amelioration des templates RHTML qui
ont ete faits pour marcher mais pas tout fait pour etre propre, etc.),
il ne faut pas hesiter a me contacter (toutes les infos pour le faire
sont sur la page dans ma signature)… Tout ca sera sous GPL (par
contre, ce sera “publie” par une SARL qui se monte dans le cadre d’un
autre projet ; on listera les contributeurs a nos projets, et tout
restera communautaire, avec svn, bugreports, etc.).

Le 2 août 06 à 14:47, Mathieu C. a écrit :

On 8/2/06, Guillaume G. [email protected] wrote:

j’ai un bout de code a la maison que j’ai troouvé sur le net. Je
la posterai
ce soir si tu es interessé.

Je t’assure que j’ignorais que c’était une question à 9.99 $US

http://www.oreilly.com/catalog/tagclouds/index.html?CMP=ILC-
J04X34597568

Je ne le savait meme pas tu voit.

Bon voila un peu plus de details et ca ne coute rien en plus :

render a tag cloud

tag cloud usage.

<% tag_cloud(@tagged_items, [10,16,26]) do |tag, font_size| %>

<%= link_to(h(“#{tag}”), “/tag/#{tag}”, { :style => "font-

size: #{font_size}px;" } ) -%>

<% end %>

def tag_cloud(tag_cloud, category_list)
min = max = 0
tag_cloud.each_value do |count|
max = count if count.to_i > max
min = count if count.to_i < min
end

 divisor = ((max - min) / category_list.size) + 1

 tag_cloud.each do |tag, count|
   yield tag, category_list[(count - min) / divisor]
 end

end

et un exemple dans ta vue

<% tag_cloud @ tagged_items, [10,16,26] do |tag, font_size| %>
<%= link_to tag, “/tags/#{tag}”, :style => “font-size: #
{font_size.to_i}px;” %>
<% end %>

tu peut remarquer qu’il faut une variable @tagged_item , il suffit de
l’initialiser a l’aide d’un before_filter dans ton application
controller comme cecla elle est disponible pour pour tt tes actions.
Par exemple

class ApplicationController < ActionController::Base
before_filter :setup_tag_cloud

private

def setup_tag_cloud
@tagged_items = Recipe.tags_with_count(:limit => 50)
end

end

Elle doit contenir un Array de tes Tags et de leur nbr de
representation.

Pour cela rajjoute dans le code de acts_as_taggable (le plugins)
lib/acts_a_taggable.rb

Return an array of tags with their respective count

     # useful for generating a tag cloud
     # possible options are
     # :conditions =>
     # :count  => minium count for a tag
     # :order  => order of returned collection
     # :limit  =>  limit the number of result
     #
     def tags_with_count(options)
       sql = "SELECT  tags.id AS id, tags.name AS name, COUNT(*)

AS count FROM tags, taggings, #{table_name} "
sql << "WHERE taggings.taggable_id = #{table_name}.#
{primary_key} AND taggings.tag_id = tags.id "
sql << "AND #{sanitize_sql(options[:conditions])} " if
options[:conditions]
sql << "GROUP BY tags.name "
sql << "HAVING count #{options[:count]} " if options[:count]
sql << "ORDER BY #{options[:order]} " if options[:order]
sql << "LIMIT #{options[:limit]} " if options[:limit]
tagged = find_by_sql(sql)
tags = {}
for aTag in tagged do
tags[aTag.name] = aTag.count.to_i
end
return tags
end

Bon le code n’est pas de moi j’ia trouvé ca dans les source de l’un
des projet des railsday2006

Voila HTH

Guillaume G.
[email protected]
11 Rue de Toulouse
78120 Rambouillet

Bon voila un peu plus de details et ca ne coute rien en plus :

Merci, je vais étudier ça…

Geoffroy C. a écrit :

guillaume garcera a écrit :

Bon le code n’est pas de moi j’ia trouvé ca dans les source de l’un
des projet des railsday2006
Marrant ca. A partir de trucs recuperes a droite a gauche et quelques
Hum desole, je m’emballe je m’emballe. J’ajoute qu’on pourra surement
faire des galleries, avoir des apercus des images, des icones en
fonction du mime-type… Mais l’idee principale du message devait etre
au depart qu’on avait ecrit a peu pres la meme chose (par a peu pres,
j’entends a la casse de la requete sql et 2-3 trucs negligeables pres).