Cakephpで同じアクションである条件のもとでテンプレートを変える。このエントリをはてなブックマークに追加

11 月 9, 2008

携帯サイトの開発とかの場合、旧機種(3G以外)と、新機種(3G)とかで分けることもあるかと思います。
(最近はドコモ、au、Softbank以外にも、e-mobileやらiPhoneやらWindowsモバイルやら色々ありますけど)

で、同じアクションだけど、テンプレートの中にif文で場合わけしても見づらいんで、テンプレート分けたいよねってときようです。

Cakephpはアクション名=テンプレート名となります。
じゃ、「レンダリングする前に、アクション名変えちゃえばいいんじゃね?」ってことが予想つくと思います。

ってことでこんな感じでいかがでせう。

前回のコード使いまわしwサーセンw

<?php
class UserInfomationController extends AppController {
    var $name = 'UserInfomation';
    var $uses = array("UserInformation");

    function beforeRender() {
        // 例えば$_SERVER['HTTP_USER_AGENT']を見てテンプレートを変えるような処理などを追加。
          $this->action = $this->action . "_html";
    }

    function index() {
       $result = $this->UserInformation->findAll();
    }
}
?>

ってな感じで、beforeRenderを使ってアクション名を変更してやれば全て解決。
(この場合は、適切な場合わけ処理を入れてないので、全部のテンプレートに_htmlをつけたファイルが必要。indexのアクションならindex_html.ctpがテンプレートとなる。)
まぁあとは携帯の場合ヘッダとかもxhtml用とかになってることも多いだろうから、$this->layoutなどでlayoutも変えたほうがよいかな。

あと、全部2種類テンプレート作るのめんどくさい!っていう場合はファイルの存在file_exists等で確認して、なかったらデフォルトのファイルを使うようにしてあげたようが吉。

Categories: cakephp
Tags:

コメントはまだありません »

このコメント欄の RSS フィードトラックバック URL

コメントはまだありません。

コメントをどうぞ