LoginSignup
4
6

More than 5 years have passed since last update.

Spreeに「最近見た商品」エクステンションを追加する

Last updated at Posted at 2015-11-04

エクステンションの追加方法

これを使います。

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等のコマンドは不要のようです。

サーバーを再起動すると。お、表示されていますねー

CANON_EOS_Kiss_X7i_ボディ_-_Spree_Demo_Site.png

表示フォーマットを変更したい場合

表示を変更したい場合、エクステンションのビューファイルと同じパスのファイルを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 %>

こうなります。

CANON_EOS_Kiss_X7i_ボディ_-_Spree_Demo_Site.png

表示件数を変更したい場合

デフォルトの商品表示数は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コマースサイトが構築できそうです。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6