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 :)