grouping_controller.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:3k
源码类别:

Ajax

开发平台:

Others

  1. class GroupingController < ContentController
  2.   before_filter :auto_discovery_feed, :only => [:show, :index]
  3.   layout :theme_layout
  4.   cache_sweeper :blog_sweeper
  5.   caches_page :index, :show, :if => Proc.new {|c|
  6.     c.request.query_string == ''
  7.   }
  8.   class << self
  9.     def grouping_class(klass = nil)
  10.       if klass
  11.         @grouping_class = klass
  12.       end
  13.       @grouping_class ||= 
  14.         self.to_s 
  15.         .sub(/Controller$/,'') 
  16.         .singularize.constantize
  17.     end
  18.     def ivar_name
  19.       @ivar_name ||= "@#{to_s.sub(/Controller$/, '').underscore}"
  20.     end
  21.   end
  22.   def index
  23.     set_noindex
  24.     self.groupings = grouping_class.paginate(:page => params[:page], :per_page => 100)
  25.     @page_title = "#{self.class.to_s.sub(/Controller$/,'')}"
  26.     @keywords = ""
  27.     @description = "#{_(self.class.to_s.sub(/Controller$/,''))} #{'for'} #{this_blog.blog_name}"
  28.     @description << "#{_('page')} #{params[:page]}" if params[:page]
  29.     render_index(groupings)
  30.   end
  31.   def show
  32.     set_noindex
  33.     @grouping = grouping_class.find_by_permalink(params[:id])
  34.     @page_title = "#{_(self.class.to_s.sub(/Controller$/,'').singularize)} #{@grouping.name}, "
  35.     if @grouping.respond_to? :description and
  36.         not @grouping.description.nil?
  37.       @page_title += @grouping.description
  38.     else
  39.       @page_title += "#{_('everything about')} "
  40.       if @grouping.respond_to? :display_name and
  41.           not @grouping.display_name.nil?
  42.         @page_title += @grouping.display_name
  43.       else
  44.         @page_title += @grouping.name
  45.       end
  46.     end
  47.     @page_title << " page " << params[:page] if params[:page]
  48.     @description = (@grouping.description.blank?) ? "" : @grouping.description
  49.     @keywords = (@grouping.keywords.blank?) ? "" : @grouping.keywords
  50.     @articles = @grouping.articles.paginate(:page => params[:page], :conditions => { :published => true}, :per_page => 10)
  51.     render_articles
  52.   end
  53.   protected
  54.   def grouping_class
  55.     self.class.grouping_class
  56.   end
  57.   def groupings=(groupings)
  58.     instance_variable_set(self.class.ivar_name, groupings)
  59.   end
  60.   def groupings
  61.     instance_variable_get(self.class.ivar_name)
  62.   end
  63.   def render_index(groupings)
  64.     respond_to do |format|
  65.       format.html do
  66.         unless template_exists?
  67.           @grouping_class = self.class.grouping_class
  68.           @groupings = groupings
  69.           render :template => 'articles/groupings'
  70.         end
  71.       end
  72.     end
  73.   end
  74.   def render_articles
  75.     respond_to do |format|
  76.       format.html do
  77.         if @articles.empty?
  78.           redirect_to this_blog.base_url, :status => 301
  79.           return
  80.         end
  81.         render :template => 'articles/index' unless template_exists?
  82.       end
  83.       format.atom { render_feed 'atom_feed',  @articles }
  84.       format.rss  { render_feed 'rss20_feed', @articles }
  85.     end
  86.   end
  87.   def render_feed(template, collection)
  88.     articles = collection[0,this_blog.limit_rss_display]
  89.     render :partial => template.sub(%r{^(?:articles/)?}, 'articles/'), :object => articles
  90.   end
  91.   
  92.   private
  93.   def set_noindex
  94.     # irk there must be a better way to do this
  95.     @noindex = 1 if (grouping_class.to_s.downcase == "tag" and this_blog.index_tags == false)
  96.     @noindex = 1 if (grouping_class.to_s.downcase == "category" and this_blog.index_categories == false)
  97.     @noindex = 1 unless params[:page].blank?
  98.   end
  99.   def template_exists?(path = default_template_name)
  100.     self.view_paths.find_template(path, response.template.template_format)
  101.   rescue ActionView::MissingTemplate
  102.     false
  103.   end
  104. end