symfonyで携帯端末用のテンプレート切り替えを実装する

symfony 1.4で、PCサイトの携帯版を作ることになりました。

アクションは共通にして、テンプレートのファイル名を、携帯とPCで切り分けるようにしたいと思います。

例:
templates/indexSuccess.php (PC用)
templates/indexSuccess.mobile.php (携帯用)

で、これはフォーマットを指定することで実現できます。フォーマットに関してはJobeetを参照。

Practical symfony | 15日目: Web サービス | symfony | Web PHP Framework

まずは携帯キャリアのIPから高速にキャリア判定をしてくれるプラグインを準備しておきます。

sfMobileIPPluginをsymfony 1.4で使ってみた

次にフィルタを用意します。

app/frontend/lib/filter/myMobileLayoutFilter.class.php

<?php

class myMobileLayoutFilter extends sfFilter
{
    public function execute($filterChain)
    {
        if ($this->isFirstCall()) {
            
            if (sfMobileIP::carrier() != 'pc') {
                $request = $this->getContext()->getRequest();
                $request->setRequestFormat('mobile');
            }
            
        }

        $filterChain->execute();
    }
}

最後にfilters.ymlを編集すればOKです。

app/frontend/config/filters.yml

rendering: ~
security:  ~

myMobileLayoutFilter:
  class: myMobileLayoutFilter

cache:     ~
execution: ~

layoutのテンプレートも携帯版を用意しておきます。

例:

app/frontend/templates/layout.php (PC用)

app/frontend/templates/layout.mobile.php (携帯用)

注意点として、partialなども全部「.mobile.php」の形式のファイルがないと動作しません。どこかでファイルを作り忘れるとsfRenderExceptionが投げられるので注意してください。ちなみに、dev環境だとそのまま真っ白な画面になってしまって、原因追求がしにくいようです。

その場合は、ログファイルにてチェックしましょう。

log/frontend_dev.log

symfony [err] {sfRenderException} The template "indexSuccess.mobile.php" does not exist or is unreadable in "".


タグ: ,

新しく会社作りました!

コメントをどうぞ