2007年6月15日金曜日

テンプレートディレクトリをパラメーターで変更

コントローラ内で定義される、あるメソッドによってテンプレートディレクトリを変更します。

例えば、ユーザーの属性(性別、住地域等)によって、表示するテンプレートを切り替えたいというような場合です。

今回は、携帯用に表示を切り替えるライブラリのmobile_on_railsをベースにライブラリを作成しました。

※どうも、もう少しよいやり方があるとは思ったのですが、時間の制約上上述のライブラリを参考にさせていただきました。

それでは性別を、元にテンプレートディレクトリを切り替えるライブラリを作成します。

男性の場合はviews/man、女性の場合はviews/woman以下にコントローラ名という配置にします。

例えばmypage,openコントローラがあるケースでは
woman/mypage
woman/opne
man/mypage
man/open

という配置になります。

ライブラリはアプリケーションルート以下のlibディレクトリに配置します。

---
vi lib/sex_view.rb


class ::ActionView::Base
private

alias_method :full_template_path_without_sex, :full_template_path

def full_template_path(template_path, extension)
template = full_template_path_without_sex("#{$tag_name}/#{template_path}", extension)
#template = full_template_path_without_sex("#{$tagname}/#{@controller.action_name}", extension)
template = nil unless File.exist?(template)
template ||= full_template_path_without_sex(template_path, extension)
end
end


---

これで、書き換えの準備は整いました。

この状態でtagnameをコントローラ内で定義すると、ActionViewクラスが自動的にファイルの出力前に、テンプレートパスを書き換えてくれます。


例えば、各コントローラ内のbefore_filterなどで、性別を判定しグローバル変数に定義します。

例)


def check
if sex_value == 1
$tagname = 'man'
elsif sex_value == 2
$tagname = 'woman'
end
end


これで、準備は完了です。

この状態で、enviroment.rbにライブラリを設定し、再起動を行ってください。

vi config/enviroment.rb

> require 'sex_view'

SevenAgent,Inc

3 件のコメント:

匿名 さんのコメント...

I found this site using [url=http://google.com]google.com[/url] And i want to thank you for your work. You have done really very good site. Great work, great site! Thank you!

Sorry for offtopic

匿名 さんのコメント...

check this link, cSwEXJRp [URL=http://www.hermes-birkinprice.weebly.com/]hermes handbags outlet[/URL] for gift FCZtsBpa [URL=http://www.hermes-birkinprice.weebly.com/ ] http://www.hermes-birkinprice.weebly.com/ [/URL]

匿名 さんのコメント...

cheap MNUlapeY [URL=http://www.hermes-birkinprice.weebly.com/]replica hermes[/URL] with confident XacURmSl [URL=http://www.hermes-birkinprice.weebly.com/ ] http://www.hermes-birkinprice.weebly.com/ [/URL]