kazunobu ichihashi
bobch****@gmail*****
2006年 6月 21日 (水) 09:39:19 JST
市橋です。 携帯対応の方です。 これは一つのアクションでテンプレートが複数ある場合の対応で 恐らくは携帯もそうですが、国際化の対応も同じだと思ってます。 一つの方法としては、Viewフィルタを改造して アクションクラスの返値で直接テンプレートを指定できるようにすることです。 参考 http://kunit.jp/maple/wiki/index.php?%A5%B3%A5%E1%A5%F3%A5%C8%A1%A6%A4%B4%CD%D7%CB%BE#s570a650 上記は配列になっていますが、私個人的には $template = $this->getAttribute($view); の部分を下記に変更しています。 if (is_string($view) && strpos(':', $view) !== false) { $template = $view; } else { $template = $this->getAttribute($view); } ただ、この場合は通常のテンプレート指定に「:」が使用できないデメリットがあります。 上記が可能にした上で、アクション内でテンプレートを決定するロジックを 入れるというイメージです。 ただ、この方式だとテンプレート決定ロジックがほぼ固定の場合、 全アクションにテンプレート決定ロジックを適用するのが面倒になります。 この場合は、Viewフィルタに抽象メソッド(decideTemplate)を予め入れておいて テンプレートファイル名の決定はこのメソッドを使うようにしておく。 で、Viewフィルタを継承したクラスでテンプレート決定ロジックをメソッドに実装して Viewフィルタとして使用する。 というのはどうでしょうか? class Filter_View extends Filter { : function execute() { : if ($view != "") { $template = $this->getAttribute($view); $template = $this->_decideTemplate($template); } : } function _decideTemplate($template) { return $template; } } define('LOCALE_STR', 'ja'); class Filter_ViewI18n extends Filter_View { function _decideTemplate($template) { // テンプレートファイル指定でない場合はそのまま返す if (is_string($template) && strpos($template, ':') !== false) { return $template; } return $template . LOCALE_STR; } } ぱっと思いついたことなので、間違いがあるかもしれません。。。 06/06/21 に 木内智史<samur****@don-q*****> さんは書きました: > お世話になっております。木内です。 > 前回の「携帯対応」については、 > Smarty4Maple内で、 > $Device = DeviceFactory::getDevice(); > といった感じで端末インスタンスを取得し、あとは端末に適したテンプレートを > fetchという形に収まりました。 > みなさんはどのように対応しているのでしょうか? > よろしければ、コメントをいただければと思います。 -- Kazunobu Ichihashi(bobchin) <<bobch****@gmail*****>> Wiki http://bobchin.ddo.jp/wiki/ Diary http://d.hatena.ne.jp/bobchin/