【solidus-blogging】Solidusにブログ機能をつけて投稿するまで

solidus-bloggingとは

Rails製ECオープンソースのSolidus(元Spree)に簡易な記事投稿機能を組み込むためのGemです。

Github: solidus-blogging

導入の方法については、以前に書いた記事を参考にしてみてください。

過去記事: Solidusにブログ投稿機能を搭載してみる

サイトの収益アップにつながる!?

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で表示される

(Visited 80 times, 1 visits today)

“【solidus-blogging】Solidusにブログ機能をつけて投稿するまで” への2件の返信

コメントは受け付けていません。