CakePHPで携帯サイトを作る - HTML出力振り分け(1)の続きです。

HTMLの文字コードはutf-8に限定しています。
ですので、とりあえずHTML出力振り分けの仕組みは完成します。

Index

  1. ルーティングの設定
  2. 携帯サイト用ビューディレクトリの設定
  3. コントローラーの作成
  4. ビューの作成
  5. ブラウザ表示サンプル
  6. ダウンロード

ルーティングの設定

'/'に接続すると、topコントローラーにルーティングされるようにします。

app/config/routes.php 抜粋
PHP:
  1. //Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
  2. Router::connect('/', array('controller' => 'top'));

携帯サイト用ビューディレクトリの設定

VIEWSディレクトリには、PCサイト用のビューを置くことにします。
携帯サイト用のビューは、APP_PATHディレクトリにmobile_viewsディレクトリを作成して、その中に置きます。

AppControllerのbeforeRender関数内で、携帯から接続された場合には、携帯サイト用のビューディレクトリ(app/mobile_views)のビューを使用するように設定します。

app/app_controller.php
PHP:
  1. class AppController extends Controller
  2. {
  3.   function beforeRender()
  4.   {
  5.     parent::beforeRender();
  6.     if (IS_MOBILE) {
  7.       // 携帯サイト用ビューのパスを設定
  8.       $config = Configure::getInstance();
  9.       // mobile_viewsディレクトリに携帯サイト用のビューを置く。端末ごとにビューは分けないことにする。
  10.       array_unshift($config->viewPaths, ROOT.DS.APP_DIR.DS.'mobile_views'.DS);
  11.     }
  12.   }
  13. }

AppController::beforeRender関数でビューへのパスを設定したのは、コントローラーごと、またはアクションごとに携帯端末からの接続でもPCサイト用のビューを使用したいためです。
そうするときは、AppControllerに携帯サイト用ビューを使用しないためのフラグを追加するつもりです。

携帯からの接続の場合には、bootstrap.phpなどで$viewPathsを変更する方法もあると思います。

コントローラーの作成

topコントローラーを作成します。

app/controllers/top_controller.php 抜粋
PHP:
  1. class TopController extends AppController
  2. {
  3.   var $uses = null;
  4.  
  5.   function index()
  6.   {
  7.  
  8.   }
  9. }

ビューの作成

PCサイト用のtop/indexビューを作成します。
VIEWSディレクトリの中にtopディレクトリを作ります。
そのtopディレクトリにindex.ctpを置きます。

携帯サイト用のtop/indexビューは、app/mobile_views/topディレクトリに置きます。

PCサイト用のレイアウトファイルは、CakePHPが用意しているものを使うことにします。

携帯サイト用のレイアウトファイルは、新規に作成します。
mobile_viewsディレクトリの中にlayoutsディレクトリを作り、そこにレイアウトファイル(default.ctp)を置きます。

app/mobile_views/layouts/default.ctp
PHP:
  1. <html>
  2. <head>
  3. <title>CakePHPで携帯サイトを作る</title>
  4. </head>
  5. <body>
  6.   <h1>CakePHPで携帯サイト</h1>
  7.   <div>
  8.     <?php echo $content_for_layout; ?>
  9.   </div>
  10.   <div>
  11.     UAGENT_KIND: <?php echo UAGENT_KIND; ?>
  12.   </div>
  13. </body>
  14. </html>

ブラウザ表示サンプル

Firefoxで接続すると、次のような表示となります。
Firefox表示サンプル

iモードHTMLシミュレータⅡで接続すると、次のような表示となります。
携帯表示サンプル

ダウンロード

アーカイブへのリンクをダウンロード(「CakePHPで携帯サイトを作る」のサンプル)に移動しました(2009/02/11)。

関連

Tags: , , ,

コメントをどうぞ