Jpmobileで作ったスマホサイトをスマホから見た時、PCビューを表示するリンクを作る
jpmobile (4.0.0)
rails (4.0.0)
ruby2.0
ロジック
特定のクッキーをもっていれば、Jpmobileのビュー自動振り分け機能を無効にしてPCビューを表示する感じ。
実装
before_actionで自動振り分け機能を無効化する
rails4なのでconcernを使ってみる。
app/controllers/concerns/jpmobile.rb
module Concerns module Jpmobile extend ActiveSupport::Concern included do before_action :force_pc_view before_filter :disable_mobile_view_if_tablet end # クッキーの中を見てスマホでPCビューを表示する def force_pc_view if cookies[:force_pc_view] == 't' disable_mobile_view! # 自動振り分け無効 end end # タブレットは常にPCビューを表示する def disable_mobile_view_if_tablet if request.mobile && request.mobile.tablet? disable_mobile_view! end end end end
作ったmoduleを取り込む。
class ApplicationController < ActionController::Base include Jpmobile::ViewSelector # 自動振り分けする include Concerns::Jpmobile # 追加 end
ルーティング
get '/toggle_pc_view' => 'home#toggle_pc_view', as: :toggle_pc_view
toggle_pc_viewアクションを作る
class HomeController < ApplicationController def toggle_pc_view if cookies[:force_pc_view] == 't' cookies.delete(:force_pc_view) else cookies[:force_pc_view] = 't' end redirect_to params['current_path'] end end
スマホテンプレートに表示する『リンク』を作る
app/views/layouts/application_smart_phone.html.erbのフッターあたりへ。
<%= link_to 'PC版の表示', toggle_pc_view_path(current_path: request.path) %>
PCビューを見ている時にスマホビューへ誘導するリンクを作る
app/views/shared/smart_phone/_toggle_pc_view_link.html.erb
<% if request.mobile && request.mobile.tablet? %> <%# なに表示しない %> <% else %> <% if request.smart_phone? %> <%= link_to 'スマートフォン版の表示', toggle_pc_view_path(current_path: request.path) %> <% end %> <% end %>
このパーシャルをPC用テンプレートに貼る。
app/views/layouts/application.html.erb
... <%= render 'shared/smart_phone/toggle_pc_view_link' %> # 追加 <%= yield %> <%= render 'shared/smart_phone/toggle_pc_view_link' %> # 追加 ...
おしまい。