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