0
0
Fork 0

new next and previous buttons

When selecting only one post buttons to select the previous and next
blog posts are added. These can then be used to read one blog post per
page.
This commit is contained in:
Gibheer 2014-01-02 21:38:21 +01:00
parent dac1a7ec28
commit 6aa8f1c2a2
2 changed files with 42 additions and 14 deletions

View File

@ -1,29 +1,49 @@
module Routes
class Post < Controller
PREV_AND_NEXT_QUERY = <<SQL
select (
select id from posts where written < ? and released order by written desc limit 1
) older,
(
select id from posts where written > ? and released order by written limit 1
) younger
SQL
def self.get(session)
define_posts(session)
session.options[:render] = 'posts/index'
end
def self.define_posts(session)
# compute pages
page = session.request.params['page'].to_i
session.options[:page] = page if page
per_page = session.request.params['per_page'].to_i
per_page = 10 if per_page == 0
session.options[:per_page] = per_page if per_page
session.options[:pages] = DB[:posts].filter(:released => true).count / per_page
# fetch the posts to show
posts = DB[:posts].
filter(:released => true).
select(:posts__id___post_id, :written, :title, :content, :username).
join(:accounts, :id___account_id => :account_id).
reverse_order(:written)
if session.options[:id]
posts = posts.where(:posts__id => session.options[:id])
end
# return when a single posts has to be shown
return load_previous_and_next_post(session, posts) if session.options[:id]
load_page_information(session, posts)
end
def self.load_page_information(session, posts)
# compute pages
page = session.request.params['page'].to_i
session.options[:page] = page if page
per_page = session.request.params['per_page'].to_i
per_page = 10 if per_page < 1
session.options[:per_page] = per_page if per_page
session.options[:pages] = DB[:posts].filter(:released => true).count / per_page
# fetch the posts to show
session.options[:posts] = posts.limit(per_page, page * per_page)
end
def self.load_previous_and_next_post(session, posts)
posts = posts.filter(:posts__id => session.options[:id].to_i)
session.options[:posts] = posts
written = posts.first[:written]
session.options[:post_ids_pn] = DB[PREV_AND_NEXT_QUERY, written, written].first
end
end
end

View File

@ -1,7 +1,11 @@
- if 0 < fetch(:page)
- if has_key?(:page) && 0 < fetch(:page)
a.page.up(
href="/post?page=#{fetch(:page) - 1}&per_page=#{fetch(:per_page)}"
) show newer
- if has_key?(:post_ids_pn) && fetch(:post_ids_pn)[:younger]
a.page.up(
href="/post/#{fetch(:post_ids_pn)[:younger]}"
) show newer
- for post in fetch(:posts)
article
@ -14,7 +18,11 @@
.time= post[:written].strftime('%H-%M')
section==Kramdown::Document.new(post[:content]).to_html
- if fetch(:page) < fetch(:pages)
- if has_key?(:page) && fetch(:page) < fetch(:pages)
a.page.down(
href="/post?page=#{fetch(:page) + 1}&per_page=#{fetch(:per_page)}"
) show older
- if has_key?(:post_ids_pn) && fetch(:post_ids_pn)[:older]
a.page.down(
href="/post/#{fetch(:post_ids_pn)[:older]}"
) show older