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:
parent
dac1a7ec28
commit
6aa8f1c2a2
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue