From bf74b32f3fbdd50957bdf308b79846eeda7ee1fa Mon Sep 17 00:00:00 2001 From: Joe Sak Date: Mon, 10 Jan 2011 16:11:53 -0600 Subject: Archives group by year after 2 years --- app/controllers/blog/posts_controller.rb | 23 +++++++++++++++++------ app/helpers/blog_posts_helper.rb | 20 +++++++++++++++++--- app/models/blog_post.rb | 4 ++++ config/routes.rb | 2 +- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/app/controllers/blog/posts_controller.rb b/app/controllers/blog/posts_controller.rb index f7b6f3c..576073e 100644 --- a/app/controllers/blog/posts_controller.rb +++ b/app/controllers/blog/posts_controller.rb @@ -45,12 +45,23 @@ class Blog::PostsController < BlogController end def archive - date = "#{params[:month]}/#{params[:year]}" - @archive_date = Time.parse(date) - @blog_posts = BlogPost.live.by_archive(@archive_date).paginate({ - :page => params[:page], - :per_page => RefinerySetting.find_or_set(:blog_posts_per_page, 10) - }) + if params[:month].present? + date = "#{params[:month]}/#{params[:year]}" + @archive_date = Time.parse(date) + @date_title = @archive_date.strftime('%B %Y') + @blog_posts = BlogPost.live.by_archive(@archive_date).paginate({ + :page => params[:page], + :per_page => RefinerySetting.find_or_set(:blog_posts_per_page, 10) + }) + else + date = "01/#{params[:year]}" + @archive_date = Time.parse(date) + @date_title = @archive_date.strftime('%Y') + @blog_posts = BlogPost.live.by_year(@archive_date).paginate({ + :page => params[:page], + :per_page => RefinerySetting.find_or_set(:blog_posts_per_page, 10) + }) + end respond_with (@blog_posts) end diff --git a/app/helpers/blog_posts_helper.rb b/app/helpers/blog_posts_helper.rb index 965eb8f..9cc637f 100644 --- a/app/helpers/blog_posts_helper.rb +++ b/app/helpers/blog_posts_helper.rb @@ -6,18 +6,32 @@ module BlogPostsHelper html << t('blog.shared.archives') html << '' diff --git a/app/models/blog_post.rb b/app/models/blog_post.rb index 1887a97..60d982a 100644 --- a/app/models/blog_post.rb +++ b/app/models/blog_post.rb @@ -13,6 +13,10 @@ class BlogPost < ActiveRecord::Base scope :by_archive, lambda { |archive_date| where(['published_at between ? and ?', archive_date.beginning_of_month, archive_date.end_of_month]).order("published_at DESC") } + + scope :by_year, lambda { |archive_year| + where(['published_at between ? and ?', archive_year.beginning_of_year, archive_year.end_of_year]).order("published_at DESC") + } scope :all_previous, where(['published_at <= ?', Time.now.beginning_of_month]).order("published_at DESC") diff --git a/config/routes.rb b/config/routes.rb index 20fa1b1..8664468 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,7 +5,7 @@ Refinery::Application.routes.draw do match ':id', :to => 'posts#show', :as => 'blog_post' match 'categories/:id', :to => 'categories#show', :as => 'blog_category' match ':id/comments', :to => 'posts#comment', :as => 'blog_post_blog_comments' - get 'archive/:year/:month', :to => 'posts#archive', :as => 'archive_blog_posts' + get 'archive/:year(/:month)', :to => 'posts#archive', :as => 'archive_blog_posts' end scope(:path => 'refinery', :as => 'admin', :module => 'admin') do -- cgit v1.2.3