ページ目次
solidus-bloggingとは
Rails製ECオープンソースのSolidus(元Spree)に簡易な記事投稿機能を組み込むためのGemです。
導入の方法については、以前に書いた記事を参考にしてみてください。
サイトの収益アップにつながる!?
Solidusは、ECサイトの機能としてはかなり充実していますが、もうワンランク上のECサイトを目指すなら、さらにひと工夫してサイトの充実を図りたいところです。
簡易ながらも記事投稿機能を付けて、サイトのコンテンツ(記事)を増やすことで、サイトへの流入数増加が期待できるのではないかと思います。
投稿を表示する
複雑なことは特にないです(私が理解できていないだけかもしれませんが)。基本的には、投稿内容を保持するBlogEntryモデルを表示したいページコントローラーで読み込んで表示させるだけです。
例えば、トップページで最新記事のタイトルのみを3件表示させたい場合は、下記のようにSolidusのコントローラーをオーバーライドしてください。
// app/controllers/home_controller_decorator.rb
Spree::HomeController.class_eval do
# トップページを表示するindexメソッドと共に投稿を表示するload_entriesメソッドを読み込む
before_action :load_entries, only: :index
# 投稿記事を読み込むメソッドを定義
def load_entries
# 最新の3件を読み込む
@entries = Spree::BlogEntry.recent(3)
end
end
// app/views/home/index.html.erb
<ul>
<% @entries.each do |entry| %>
<li>
<%= link_to entry.title, blog_entry_permalink(entry) %>
</li>
<% end %>
</ul>
BlogEntryモデル
投稿内容を保持するモデルです。投稿は、編集画面のpublished_atで指定した日付順にソート(降順)されています。
- title
- 投稿タイトルを返します
- body
- 投稿本文を返します
- published_at
- 投稿編集画面で指定された日付を返します
- blog_enrty_image
- BlogEntryImageモデルを返す
- entry_summary(char=200)
- 投稿本文の要約を返す。編集画面で要約文を空白にした場合は、char文字目(デフォルトは200)で切り抜かれた文章を返す。
- by_tag(name), by_category(name)
- 与えられたタグ名やカテゴリー名でくくられたBlogEntryモデルを返す
- by_date(date, period=nil)
- 与えられた日付の投稿を返す。dateは、{year: 2017, month: 1, day: 1}のようにハッシュ値で指定する。
- visible
- 編集画面のvisibleチェックボックスにチェックが入っているBlogEntryモデルを返す
- recent(max=5)
- 最新のmax(デフォルトは5)件に絞ったBlogEntryモデルを返す
投稿へのパーマリンクはヘルパーメソッドを使う
上述のサンプルコードのように、個別投稿へのリンク表示にはヘルパーメソッド「blog_entry_permalink(Spree::BlogEntry)」が用意されています。上の例では、Railsのlink_toヘルパーを共に用いています。
<%# 例: link_to を使わない場合 %>
<a href="<%= blog_entry_permalink(entry) %>"><%= entry.title %></a>
自分流アレンジ
日付表示形式が気にくわない
BlogEntryモデルのpublished_atプロパティでそのまま日付を表示すると、【yyyy-mm-dd hh:mm:ss】のように表示されるので、時間表記は取り除きたい。
そして、これは完全に自分の好みの問題なのですが、日付の区切りは、ハイフン(2017-01-01)ではなくドット(2017.01.01)がいい。
以上のことからBlogEntryモデルに日付表示用のメソッドを追記しました。
# app/models/solidus-blogging/blog_entry_decorator.rb
Spree::BlogEntry.class_eval do
def display_date
if published_at.present?
# 文字列に変換
# 文頭から10文字目で切り取る
# ハイフンをドットに変換
published_at.to_s.slice(0..10).gsub(/-/, '.')
end
end
end
# viewファイル内にて
<%= BlogEntry.display_date %>
# => yyyy.mm.ddで表示される
“【solidus-blogging】Solidusにブログ機能をつけて投稿するまで” への2件の返信
コメントは受け付けていません。