サイトにPC用と携帯用がある場合、PC用とは別に携帯用の表示を行う方法です。この方法なら同じコントローラ・アクションで、レイアウトとビューファイルを変更することができます。なお携帯版のURLは[/m/]で始まるようにします。
1.URLルーティングを設定する。
[app/config/routes.php]で[/m/]からURLが始まる場合にwebservicesとして扱うように設定します。
[app/config/routes.php]
<?php (snip) $Route->connect('/m/:controller/:action/*', array('webservices' => 'Mobile')); ?>
2.WEBSERVICESを有効にする。
webservicesがフレームワーク内でサポートされるように設定を変更します。
[app/config/core.php:123行目付近]
/** * The define below is used to turn cake built webservices * on or off. Default setting is off. */ define('WEBSERVICES', 'on'); // off から on にします。
3.携帯用コンポーネント、ヘルパーを設置する。
携帯用コンポーネント、ヘルパーを設置します。これは単に表示を変えるだけなら不要なのですが、1.でwebservicesとして動作するように設定しているので必須となります。(クラス内はとりあえず空で良いです)
[app/controller/components/mobile.php]
<?php class MobileComponent extends Object { } ?>
[app/views/helpers/mobile.php]
<?php class MobileHelper extends Object { } ?>
4.携帯用レイアウト、ビューファイルを設置する。
携帯用レイアウト、ビューファイルを[app/views/layouts/mobile][app/views/%controller_name%/mobile]に設置します。双方ともmobile/ディレクトリ以下に設置するのがミソです。
これで[/post/index]にアクセスすればPC版のレイアウト・ビューファイルが、[/m/post/index]にアクセスすれば携帯版のレイアウト・ビューファイルが表示されるようになります。
>>
なぜwebservicesとして扱うか?
CakePHPには一つのコントローラ、アクションでrssやxmlといった多種の出力形式をサポートする機能があります。これがWEBSERVICESです。前出のrssやxmlはフレームワークで定義されているのですが、携帯用と思われるものはありませんでした。そこでroutes.phpのルーティング情報に携帯用を定義する方法を取っています。
この方法の良いところは、レイアウト・ビューファイルの切り替えはフレームワーク側でやってくれるのでコントローラ側では何も意識する必要が無い点です。悪い点はURLが[/m/~]になってしまう点でしょうか。
URLが[/m/]ではじまるのが気になる場合は、mod_rewriteで携帯からのアクセスの場合は自動的に[/m/]へ飛ばす設定にしておく、という方法もありです。
- Newer: CakePHPでDBアクセスなしのModelを作る
- Older: CakePHP 管理者用アクション
コメント (Close):2
- CakeFriends 07-01-29 (月) 20:47
-
app/config/routes.phpに設定したルートにはmobileの設定は適用されない。
例えば
$Route->connect(‘/’, array(‘controller’ => ‘main’, ‘action’ => ‘display’));と設定した場合
app/views/main/mobile/home.thtml
を作ってもそれは表示されず、app/views/main/home.thtml
が表示されてしまう。このような場合は、
$Route->connect(‘/m/’, array(‘controller’ => ‘main’, ‘action’ => ‘display’, ’webservices’ => ‘Mobile’);$Route->connect(‘/’, array(‘controller’ => ‘main’, ‘action’ => ‘display’, ‘home’));
と書くしかない
- CakeFriends 07-01-30 (火) 10:43
-
さらに一歩進めて、
app/config/routes.phpに以下のように書けば良い事に気がつく
$ua = $_SERVER[“HTTP_USER_AGENT”];
if( strpos( $ua, “Docomo” ) !== FALSE ){$Route->connect(‘/’, array(‘controller’ => ‘main’, ‘action’ => ‘home’, ‘webservices’ => ‘au’)); //独自設定のルート
$Route->connect(‘/:controller/:action/*’, array(‘webservices’ => ‘Docomo’)); //Docomoのデフォルトのルート(これを一番下に!)
} else {
$Route->connect(‘/’, array(‘controller’ => ‘main’, ‘action’ => ‘home’));
} else if( strpos( $ua, “UP.Browser” ) !== FALSE ){
//AU版
} else if(strpos( $ua, “SBのUA” ) !== FALSE ){
//SoftBank
} else {
$Route->connect(‘/’, array(‘controller’ => ‘main’, ‘action’ => ‘home’));
}
トラックバック:4
- このエントリーのトラックバックURL
- /blog/2006/09/cakephp_mobile.html/trackback
- Listed below are links to weblogs that reference
- CakePHP 携帯用ビューを表示する from Shin x blog
- pingback from straighten » links for 2008-02-12 08-02-13 (水) 5:31
-
[…] CakePHP 携帯用ビューを表示する | Shin x blog (tags: cakephp mobile php) | | | Yahoo!ブックマークに登録 | | | […]
- pingback from CakePHP 携帯専用サイトを作成する | Sun Limited Mt. 08-03-31 (月) 16:31
-
[…] CakePHP で携帯用のページを作成する際に CakePHP 携帯用ビューを表示する | Shin x blog のページが大変参考になります。 […]
- pingback from CakePHP 携帯でセションを有効にする | Sun Limited Mt. 08-04-01 (火) 10:23
-
[…] 携帯サイトと PC サイトが共存しているときの携帯用のビューを表示させる方法は下記が参考になります。 CakePHP 携帯用ビューを表示する | Shin x blog […]
- pingback from toyosystem | CakePHP1.1でキャリアごとの絵文字を表示 08-09-05 (金) 20:04
-
[…] バッファをためて一括で変換しています。絵文字と一緒に全角カナも半角カナに直してしまいます。 $this->params[“webservices”]で判別しているのはShin x blogさんの「CakePHP 携帯用ビューを表示する」を使用して携帯のビューを切り替えているからです。 […]