Lokkaの記事本文に「続きを読む」リンク
このHatenaダイヤリーもそうですが、「続きを読む」というリンクを作ってトップページは概要だけを表示したいという場合があります。そこでLokkaのプラグインを作ろうと思いました。
lokka-read_moreプラグインを作ってみた
最初、afterフィルタで対応できるのかなと思ったのですが、このフィルタが呼ばれるのはrenderした後なので意味がありませんでした。したがって、beforeフィルタで表示する本文の内容を修正することにしました。
また、「続きを読む」というリンクは、「----」(半角ハイフン4つ)を1行を文中に書くというルールにしました。
APP_ROOT/public/plugin/lokka-read_more/lib/Lokka/read_more.rb
module Lokka module ReadMore def self.registered(app) app.before '/' do return unless request.env['REQUEST_METHOD'] == "GET" @posts = Post.page(params[:page], :per_page => settings.per_page) @posts.each do |post| unless (i = post.body.index("----<br>")).nil? post.body = post.body.slice(0, i) post.body += %Q(<a href="/#{post.id}">#{t.read_more}</a>) end end end app.before %r{^/([0-9a-zA-Z-]+)$} do |id_or_slug| return unless request.env['REQUEST_METHOD'] == "GET" @entry = Entry.get_by_fuzzy_slug(id_or_slug) @entry.body.sub!("----<br>", "") end end end end
APP_ROOT/public/plugin/lokka-read_more/i18n/en.yml
read_more: more...
APP_ROOT/public/plugin/lokka-read_more/i18n/ja.yml
read_more: 続きを読む
app.rbを一部修正
このままではAPP_ROOT/lib/lokka/app.rbの「get '/' do」ブロック内で@postsが、「get %r{^/([0-9a-zA-Z-]+)$} do |id_or_slug|」ブロック内で@entryは書き換えられてしまいます。そこで、APP_ROOT/lib/lokka/app.rbの一部、修正(1と2のunless)しました。
APP_ROOT/lib/lokka/app.rb
(省略) # index get '/' do @theme_types << :index @theme_types << :entries @posts = Post.page(params[:page], :per_page => settings.per_page) unless @posts # 1 (省略) # entry get %r{^/([0-9a-zA-Z-]+)$} do |id_or_slug| @theme_types << :entry @entry = Entry.get_by_fuzzy_slug(id_or_slug) unless @entry # 2 return 404 if @entry.blank? (省略)