refactoring the frontend to use more partials, separate out the categories into it's own controller, namespace the blog into it's own folder and create a base blog controller for handling common front end tasks

This commit is contained in:
djones 2010-09-06 16:22:13 +12:00
parent 6f342c1314
commit bd50bdb415
17 changed files with 175 additions and 136 deletions

View file

@ -0,0 +1,7 @@
class Blog::CategoriesController < BlogController
def show
@category = BlogCategory.find(params[:id])
end
end

View file

@ -1,15 +1,8 @@
class BlogPostsController < ApplicationController
class Blog::PostsController < BlogController
before_filter :find_all_blog_posts, :find_all_blog_categories
before_filter :find_page
before_filter :find_all_blog_posts
before_filter :find_blog_post, :only => [:show, :comment]
def index
# you can use meta fields from your model instead (e.g. browser_title)
# by swapping @page for @blogs in the line below:
present(@page)
end
def show
@blog_comment = BlogComment.new
@ -40,23 +33,7 @@ protected
end
def find_all_blog_posts
unless params[:category_id].present?
@blog_posts = BlogPost.live
else
if (category = BlogCategory.find(params[:category_id])).present?
@blog_posts = category.posts
else
error_404
end
end
end
def find_all_blog_categories
@blog_categories = BlogCategory.all
end
def find_page
@page = Page.find_by_link_url("/blog")
@blog_posts = BlogPost.live
end
end

View file

@ -0,0 +1,15 @@
class BlogController < ApplicationController
before_filter :find_page, :find_all_blog_categories
protected
def find_page
@page = Page.find_by_link_url("/blog")
end
def find_all_blog_categories
@blog_categories = BlogCategory.all
end
end

View file

@ -60,6 +60,4 @@
</table>
</div>
<% content_for :head do %>
<%= stylesheet_link_tag 'refinery/refinerycms-blog' %>
<% end %>
<% content_for :head, stylesheet_link_tag('refinery/refinerycms-blog') %>

View file

@ -0,0 +1,20 @@
<% content_for :body_content_title, @category.title %>
<% content_for :body_content_left do %>
<% if @category.posts.any? %>
<ul id="blog_posts">
<%= render :partial => "/blog/shared/post", :collection => @category.posts %>
</ul>
<% else %>
<p>
<%= t('.no_posts') %>
</p>
<% end %>
<% end %>
<% content_for :body_content_right do %>
<%= render :partial => "/blog/shared/categories" %>
<% end %>
<%= render :partial => "/shared/content_page" %>
<% content_for :head, stylesheet_link_tag('refinerycms-blog') %>

View file

@ -0,0 +1,9 @@
<div class='blog_comment_message' id='<%= "comment-#{comment.to_param}" %>'>
<p>
<%= comment.message.to_s.gsub("\r\n\r\n", "</p><p>").gsub("\r\n", "<br/>") %>
</p>
</div>
<p class='blog_comment_author'>
<%= t('.by', :who => comment.name) %>
<%= t('.time_ago', :time => time_ago_in_words(comment.created_at)) %>
</p>

View file

@ -0,0 +1,16 @@
<% content_for :body_content_left do %>
<%= @page[Page.default_parts.first.to_sym] %>
<ul id="blog_posts">
<%= render :partial => "/blog/shared/post", :collection => @blog_posts %>
</ul>
<% end %>
<% content_for :body_content_right do %>
<%= @page[Page.default_parts.second.to_sym] %>
<%= render :partial => "/blog/shared/categories" %>
<% end %>
<%= render :partial => "/shared/content_page" %>
<% content_for :head, stylesheet_link_tag('refinerycms-blog') %>

View file

@ -1,46 +1,38 @@
<% content_for :body_content_title, @blog_post.title %>
<% content_for :body_content_left do %>
<%= t('.created_at', :when => @blog_post.created_at.strftime('%d %B %Y')) %>
<%= @blog_post.body %>
<% if (categories = @blog_post.categories).any? %>
<hr />
<div class='post_categories'>
<span class='filed_in'><%= t('.filed_in') %></span>
<ul>
<p class='posted_at'>
<%= t('blog.shared.posts.created_at', :when => @blog_post.created_at.strftime('%d %B %Y')) %>.
<% if (categories = @blog_post.categories).any? %>
<span class='filed_in'>
<%= t('.filed_in') %>
<% categories.each_with_index do |category, index| %>
<li>
<%= link_to category.title, blog_category_url(category) -%><%= ',' if index < ((categories.length) - 1) %>
</li>
<% end %>
</ul>
</div>
<% end %>
<% if (comments = @blog_post.comments.approved).any? %>
<hr />
</span>
<% end %>
</p>
<%= @blog_post.body %>
<% if BlogPost.comments_allowed? %>
<h2><%= t('.comments.title') %></h2>
<% comments.each do |comment| %>
<div class='blog_comment_message' id='<%= "comment-#{comment.to_param}" %>'>
<p>
<%= comment.message.to_s.gsub("\r\n\r\n", "</p><p>").gsub("\r\n", "<br/>") %>
</p>
</div>
<p class='blog_comment_author'>
<%= t('.comments.by', :who => comment.name) %>
<%= t('.comments.time_ago', :time => time_ago_in_words(comment.created_at)) %>
<% if (comments = @blog_post.comments.approved).any? %>
<%= render :partial => "comment", :collection => comments %>
<% else %>
<p>
<%= t('blog.shared.comments.none') %>.
</p>
<% end %>
<% end %>
<% if BlogPost.comments_allowed? %>
<hr />
<% flash.each do |key, value| %>
<div id='flash' class="flash flash_<%= key %>">
<%= value %>
</div>
<% end %>
<h2><%= t('.comments.add') %></h2>
<% form_for [:blog_post, @blog_comment] do |f| %>
<% if Rails.version < '3.0.0'%>
<%= f.error_messages %>
@ -71,19 +63,9 @@
<% end %>
<% content_for :body_content_right do %>
<%= render :partial => "side_bar" %>
<h2><%= t('.other') %></h2>
<ul id="blog_posts">
<% @blog_posts.each do |blog_post| %>
<li>
<%= link_to blog_post.title, blog_post_url(blog_post) %>
</li>
<% end %>
</ul>
<%= render :partial => "/blog/shared/categories" %>
<%= render :partial => "/blog/shared/posts" %>
<% end %>
<%= render :partial => "/shared/content_page" %>
<% content_for :head do %>
<%= stylesheet_link_tag 'refinerycms-blog' %>
<% end %>
<% content_for :head, stylesheet_link_tag('refinerycms-blog') %>

View file

@ -0,0 +1,8 @@
<h2><%= t('.title') %></h2>
<ul id='categories'>
<% @blog_categories.each do |category| %>
<li<%= " class='selected'" if @category.present? and @category.id == category.id %>>
<%= link_to "#{category.title} (#{category.posts.count})", blog_category_url(category) %>
</li>
<% end %>
</ul>

View file

@ -0,0 +1,20 @@
<li>
<h2><%= link_to post.title, blog_post_url(post) %></h2>
<p class='posted_at'>
<%= t('blog.shared.posts.created_at', :when => post.created_at.strftime('%d %B %Y')) %>
</p>
<%= truncate(post.body,
:length => RefinerySetting.find_or_set(:blog_post_teaser_length, 250),
:preserve_html_tags => true) %>
<p>
<%= link_to t('blog.shared.posts.read_more'), blog_post_url(post) %>
<span class='comment_count'>
<% if post.comments.any? %>
(<%= pluralize(post.comments.count, t('blog.shared.comments.singular')) %>)
<% else %>
(<%= t('blog.shared.comments.none') %>)
<% end %>
</span>
</p>
</li>

View file

@ -0,0 +1,8 @@
<h2><%= t('.other') %></h2>
<ul id="blog_posts">
<% @blog_posts.each do |blog_post| %>
<li>
<%= link_to blog_post.title, blog_post_url(blog_post) %>
</li>
<% end %>
</ul>

View file

@ -1,8 +0,0 @@
<h2><%= t('.categories') %></h2>
<ul id='categories'>
<% @blog_categories.each do |category| %>
<li>
<%= link_to category.title, blog_category_url(category) %>
</li>
<% end %>
</ul>

View file

@ -1,27 +0,0 @@
<% content_for :body_content_left do %>
<%= @page[Page.default_parts.first.to_sym] %>
<ul id="blog_posts">
<% @blog_posts.each do |blog_post| %>
<li>
<h2><%= link_to blog_post.title, blog_post_url(blog_post) %></h2>
<%= t('.created_at', :when => blog_post.created_at.strftime('%d %B %Y')) %>
<%= truncate(blog_post.body,
:length => RefinerySetting.find_or_set(:blog_post_teaser_length, 250),
:preserve_html_tags => true) %>
<%= link_to t('.read_more'), blog_post_url(blog_post) %>
</li>
<% end %>
</ul>
<% end %>
<% content_for :body_content_right do %>
<%= @page[Page.default_parts.second.to_sym] %>
<%= render :partial => "side_bar" %>
<% end %>
<%= render :partial => "/shared/content_page" %>
<% content_for :head do %>
<%= stylesheet_link_tag 'refinerycms-blog' %>
<% end %>

View file

@ -9,17 +9,17 @@ en:
edit: Edit this category
delete: Delete this category forever
index:
no_items_yet: There are no categories yet. Click "{{create}}" to add your first category.
no_items_yet: 'There are no categories yet. Click "{{create}}" to add your first category.'
comments:
approved: The comment from '{{author}}' has been approved.
approved: 'The comment from "{{author}}" has been approved.'
comment:
view_live: View this comment live <br/><em>(opens in a new window)</em>
read: Read this comment
reject: Reject this comment
approve: Approve this comment
rejected: The comment from '{{author}}' has been rejected.
rejected: 'The comment from "{{author}}" has been rejected.'
index:
no_items_yet: There are no {{type}} comments.
no_items_yet: 'There are no {{type}} comments.'
show:
comment: Comment
blog_post: Blog Post
@ -38,7 +38,7 @@ en:
toggle_advanced_options: Click to access meta tag settings and menu options
save_as_draft: Save as Draft
index:
no_items_yet: There are no Blog Posts yet. Click "{{create}}" to add your first blog post.
no_items_yet: 'There are no Blog Posts yet. Click "{{create}}" to add your first blog post.'
post:
view_live: View this blog post live <br/><em>(opens in a new window)</em>
edit: Edit this blog post
@ -46,10 +46,10 @@ en:
settings:
notification_recipients:
value: Send notifications to
explanation: Every time someone comments on a blog post, Refinery sends out an email to say there is a new comment.
hint: When a new comment is added, Refinery will send an email notification to you.
explanation: 'Every time someone comments on a blog post, Refinery sends out an email to say there is a new comment.'
hint: 'When a new comment is added, Refinery will send an email notification to you.'
example: "Enter your email address(es) like: jack@work.com, jill@office.com"
updated: Notification recipients have been set to '{{recipients}}'
updated: 'Notification recipients have been set to "{{recipients}}"'
submenu:
categories:
title: Categories
@ -69,20 +69,31 @@ en:
title: Settings
moderation: Moderation
update_notified: Update who gets notified
blog_posts:
side_bar:
categories: Categories
index:
read_more: Read more
show:
blog:
shared:
categories:
title: Categories
posts:
other: Other Posts
created_at: 'Posted on {{when}}'
read_more: Read more
comments:
title: Comments
by: Posted by {{who}}
singular: comment
none: no comments
categories:
show:
no_posts: There are no posts here yet.
posts:
comment: comment
comment:
by: 'Posted by {{who}}'
time_ago: '{{time}} ago'
thank_you: 'Thank you for commenting.'
thank_you_moderated: 'Thank you for commenting. Your message has been placed in the moderation queue and will appear shortly.'
other: Other Blog Posts
filed_in: Filed in
created_at_title: Publishing Date
created_at: Posted on {{when}}
submit: Send comment
show:
comments:
title: Comments
add: Make a Comment
other: Other Blog Posts
filed_in: Filed in
submit: Send comment

View file

@ -1,9 +1,11 @@
if Rails.version < '3.0.0'
ActionController::Routing::Routes.draw do |map|
map.blog_post '/blog', :controller => :blog_posts, :action => :index
map.blog_post '/blog/:id', :controller => :blog_posts, :action => :show
map.blog_category '/blog/categories/:category_id', :controller => :blog_posts, :action => :index
map.blog_post_blog_comments '/blog/:id/comments', :controller => :blog_posts, :action => :comment
map.namespace(:blog) do |blog|
blog.root :controller => "posts", :action => 'index'
blog.post '/blog/:id', :controller => "posts", :action => 'show'
blog.category '/blog/categories/:id', :controller => "categories", :action => 'show'
blog.post_blog_comments '/blog/:id/comments', :controller => 'posts', :action => 'comment'
end
map.namespace(:admin, :path_prefix => 'refinery') do |admin|
admin.namespace :blog do |blog|
@ -28,11 +30,12 @@ if Rails.version < '3.0.0'
end
else
Refinery::Application.routes.draw do
match '/blog', :to => 'blog_posts#index', :as => 'blog_post'
match '/blog/:id', :to => 'blog_posts#show', :as => 'blog_post'
match '/blog/categories/:category_id', :to => 'blog_posts#index', :as => 'blog_category'
match '/blog/:id/comments', :to => 'blog_posts#comment', :as => 'blog_post_blog_comments'
scope(:path => 'blog') do
root :to => 'posts#index'
match ':id', :to => 'posts#show', :as => 'post'
match 'categories/:id', :to => 'categories#show', :as => 'category'
match ':id/comments', :to => 'posts#comment', :as => 'post_blog_comments'
end
scope(:path => 'refinery', :as => 'admin', :module => 'admin') do
scope(:path => 'blog', :name_prefix => 'admin', :as => 'blog', :module => 'blog') do