Here is how to make random images generation for your website.
First you must put your images in a folder /public/images/random_images or what ever.
Second you put images there and mark the filenames with a prefix, which image to which section will be visible on.
index_bottom_1.jpg -> for the index page on the bottom :)
index_bottom_2.jpg -> for the index page on the bottom
featured_art_1.jpg -> some panel.
featured_art_2.jpg -> some panel.
and so on…
Paste this method in your base controller. This method will be called to make list for a specific image folder and “filter” the images that are supposed to be showed in the different regions in @variables.
before_filter :init_random_images protected # :) be carefull for this if you copy paste def init_random_images # collect some static images web_root = "images/imagestorage/random_images" all_images = Dir["#{RAILS_ROOT}/public/#{web_root}/*.jpg"] @random_head_images = [] @random_indexbtm = [] @random_featured = [] @random_sales = [] @random_services = [] @random_framing = [] @random_artistcollection = [] all_images.each do |f| if File.stat(f).file? @random_head_images << ("/#{web_root}/" + File.basename(f)) if f =~ /head_images_/ @random_indexbtm << ("/#{web_root}/" + File.basename(f)) if f =~ /indexbtm_/ @random_featured << ("/#{web_root}/" + File.basename(f)) if f =~ /featured_/ @random_sales << ("/#{web_root}/" + File.basename(f)) if f =~ /sales_/ @random_services << ("/#{web_root}/" + File.basename(f)) if f =~ /services_/ @random_framing << ("/#{web_root}/" + File.basename(f)) if f =~ /framing_/ @random_artistcollection << ("/#{web_root}/" + File.basename(f)) if f =~ /artistcollection_/ end end
Then paste this as a helper or in the base controller, to use it in your views. The method will give you from the images
array, count
number of images.
helper_method :get_random_image def get_random_image(images, count) requested_images = [] images_copy = images.clone [images_copy.size, count].min.times do index = rand(images_copy.size) requested_images << images_copy[index] images_copy.delete_at(index) end requested_images.flatten.compact end
here is an example how to use it.
<div id="static_logo" style="background:url(<%= get_random_image(@random_sales, 1) %>) no-repeat scroll left top;">
Future optimization
Put some caching, not to make
Dir["#{RAILS_ROOT}/public/#{web_root}/*.jpg"]
on every request.
10x Bl8cki to the nice code optimizations :)
J July, 2008 at 10:21 am
images.sort_by { rand } [0..count]