エクステンションの追加方法
これを使います。
spree-contrib/spree_recently_viewed
インストールは簡単です。書いてある通り、Gemfileに以下を追記します。
gem 'spree_recently_viewed', github: 'spree-contrib/spree_recently_viewed', branch: 'master'
インストールします。
bundle install
$ bundle
Fetching git://github.com/spree-contrib/spree_recently_viewed.git
Fetching gem metadata from https://rubygems.org/.............
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies...
Bundler could not find compatible versions for gem "spree_core":
In snapshot (Gemfile.lock):
spree_core (= 3.0.4)
In Gemfile:
spree_core (~> 3.0.0) ruby
spree_recently_viewed (>= 0) ruby depends on
spree_core (~> 3.1.0.beta) ruby
Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
ひゃあ...
よく見ると、spree_coreのβ版を要求してますね。最新版をインストールしようとしていたようなので、Spree本体のバージョンに合わせたものをGemfileに記述します。
gem 'spree_recently_viewed', github: 'spree-contrib/spree_recently_viewed', branch: '3-0-stable'
bundle install
が通りました。
なおこのエクステンションはDBをいじらないので、rake db:migrate
等のコマンドは不要のようです。
サーバーを再起動すると。お、表示されていますねー
表示フォーマットを変更したい場合
表示を変更したい場合、エクステンションのビューファイルと同じパスのファイルをSpree内に作ってあげるとそちらが適用されます。
つまり、Spreeディレクトリにapp/views/spree/shared/_recently_viewed_products.html.erb
を作ればそこで自由にフォーマットを変更できるわけですね。
例えばそのファイルをこう書き換えてあげると
<% if cached_recently_viewed_products.any? %>
<div id="recently_viewed" data-hook>
<h3 class="product-section-title">最近見た商品</h3>
<ul id="recently_viewed_products" class="list-group">
<% cached_recently_viewed_products.each do |product| %>
<li class="list-group-item">
<%= image_tag product.images.first.attachment.url if product.images.first %>
<%= link_to product.name, product %>
<%= display_price(product) %>
</li>
<% end -%>
</ul>
</div>
<% end %>
こうなります。
表示件数を変更したい場合
デフォルトの商品表示数は5件です。この数字は、preferencesという機能で設定管理されています。
preferencesについては、こちらに公式ドキュメントを翻訳したものがあるのでそちらを見てみてください。
[日本語訳] PREFERENCES - DEVELOPER GUIDE | SPREE COMMERCE
Railsのイニシャライザーを使い、下記の通り設定してあげることで表示件数を変更することができました。私はconfig/initializers/spree.rb
に追記しましたが、専用のファイルを作ってもよさそうです。
Spree::RecentlyViewed::Config.set :recently_viewed_products_max_count => 12
まだまだ日本語ドキュメントの少ないSpreeですが、使いこなせば効率的にEコマースサイトが構築できそうです。