iphone/ipod touch用ビューへ振り分け
jpmobileというのを見つけて、これでiphone用に振り分けができるかな?とも思ったのだけれど、trunkをみても無かったので、jpmobileに組み込んでみようとするも・・・
正直言って、右も左もわからないのに機能追加できません。ので、jpmobileのActionViewを参考に、iphoneのときだけ、new_iphone.html.erbを探すようにしてみた。
Ruby on Rails と Eclipse による iPhone アプリケーション開発: 第 1 回 iPhone 向けコンテンツを提供するあたりに詳しい情報があるけれど、iphoneのUserAgentは
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3
な感じ。touchはというと、
Mozilla/5.0 (iPod; U; CPU like Mac OS X; ja-jp) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A102 Safari/419.3
みたいで、iphoneとtouchを同時に検出するなら、上記資料にもあるとおり、MobileなSafariであることをチェックすればいいと思う。
# = viewの自動切り替え class ActionView::Base alias render_file_without_iphone render_file alias render_partial_without_iphone render_partial def render_file(template_path, use_full_path = true, local_assigns = {}) iphone_path = iphone_template_path(template_path) #return render_file_without_iphone(template_path, use_full_path, local_assigns) return iphone_path.nil? ? render_file_without_iphone(template_path, use_full_path, local_assigns) : render_file_without_iphone(iphone_path, use_full_path, local_assigns) end def render_partial(partial_path, object_assigns = nil, local_assigns = {}) return render_partial_without_iphone(partial_path, object_assigns, local_assigns) end def iphone_template_path(template_path, partial=false) if controller.is_a?(ActionController::Base) ua = controller.request.env["HTTP_USER_AGENT"] if /Mobile.+?Safari/i.match(ua) iphone_path = "#{template_path}_iphone" if finder.file_exists?(iphone_path) return iphone_path end end end return nil end end
こうやってひとつずつ自分で実装してみないと、わからないなぁ。
そもそもクラス/メソッドの定義の
クラスが既に定義されているとき、さらに同じクラス名でクラス定義を書くとクラスの定義の追加になります。ただし、元のクラスと異なるスーパークラスを明示的に指定して定義すると、元のクラスとは異なる新たなクラスを同名で定義することになります(このとき、クラス名の定数を上書きすることになるので警告メッセージが出ます)。
って、知らなかったから、意味わからなかったし・・・。
ちなみに、なるに教えてもらった
- 作者: 高橋征義,諸橋恭介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/05/31
- メディア: 単行本
- 購入: 36人 クリック: 529回
- この商品を含むブログ (95件) を見る
をフロンテで買ってきた。
しかし、俺の行動圏にある本屋で一番品揃えがいいのは、夢屋かフロンテだなんてッ!