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

Ajax

开发平台:

Others

  1. class ArchivesSidebar < Sidebar
  2.   description 'Displays links to monthly archives'
  3.   setting :show_count, true, :label => 'Show article counts', :input_type => :checkbox
  4.   setting :count,      10,   :label => 'Number of Months'
  5.   attr_accessor :archives
  6.   def self.date_func
  7.     @date_func ||=
  8.       begin
  9.         if Content.connection.kind_of?(ActiveRecord::ConnectionAdapters::SQLiteAdapter)
  10.           "strftime('%Y', published_at) as year, strftime('%m', published_at) as month"
  11.         else
  12.           "extract(year from published_at) as year,extract(month from published_at) as month"
  13.         end
  14.       rescue NameError
  15.         "extract(year from published_at) as year,extract(month from published_at) as month"
  16.       end
  17.   end
  18.   def parse_request(contents, params)
  19.     # The original query that was here instantiated every article and every
  20.     # tag, and then sorted through them just to do a 'group by date'.
  21.     # Unfortunately, there's no universally-supported way to do this
  22.     # across all three of our supported DBs.  So, we resort to a bit of
  23.     # DB-specific code.
  24.     date_func = self.class.date_func
  25.     article_counts = Content.find_by_sql(["select count(*) as count, #{date_func} from contents where type='Article' and published = ? and published_at < ? group by year,month order by year desc,month desc limit ? ",true,Time.now,count.to_i])
  26.     @archives = article_counts.map do |entry|
  27.       {
  28.         :name => _(Date::MONTHNAMES[entry.month.to_i]) + " #{entry.year}",
  29.         :month => entry.month.to_i,
  30.         :year => entry.year.to_i,
  31.         :article_count => entry.count
  32.       }
  33.     end
  34.   end
  35. end