featured_products_block.rb 1.06 KB
class FeaturedProductsBlock < Block

  attr_accessible :product_ids, :groups_of, :speed, :reflect

  settings_items :product_ids, :type => Array, :default => []
  settings_items :groups_of, :type => :integer, :default => 3
  settings_items :speed, :type => :integer, :default => 1000
  settings_items :reflect, :type => :boolean, :default => true

  before_save do |block|
    if block.owner.kind_of?(Environment) && block.product_ids.blank?
      total = block.owner.products.count
      offset = rand([(total - block.groups_of * 3) + 1, 1].max)
      block.product_ids = block.owner.highlighted_products_with_image(:offset => offset, :limit => block.groups_of * 3).map(&:id)
    end
    block.groups_of = block.groups_of.to_i
  end

  def self.description
    _('Featured Products')
  end

  def products
    Product.find(self.product_ids) || []
  end

  def products_for_selection
    self.owner.highlighted_products_with_image
  end

  def content(args={})
    block = self
    proc do
      render :file => 'blocks/featured_products', :locals => { :block => block }
    end
  end

end