CakePHP & PHP 2006/09/04 21:52
CakePHP 携帯用ビューを表示する
サイトにPC用と携帯用がある場合、PC用とは別に携帯用の表示を行う方法です。この方法なら同じコントローラ・アクションで、レイアウトとビューファイルを変更することができます。なお携帯版のURLは[/m/]で始まるようにします。
1.URLルーティングを設定する。
[app/config/routes.php]で[/m/]からURLが始まる場合にwebservicesとして扱うように設定します。
[app/config/routes.php]
-
<?php
-
(snip)
-
?>
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.
-
*/
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/]へ飛ばす設定にしておく、という方法もありです。
■Related Posts





on 29 1月 2007 at 20:47 1.CakeFriends said …
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'));
と書くしかない
on 30 1月 2007 at 10:43 2.CakeFriends said …
さらに一歩進めて、
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'));
}
on 13 2月 2008 at 05:31 3.straighten » links for 2008-02-12 said …
[...] CakePHP 携帯用ビューを表示する | Shin x blog (tags: cakephp mobile php) | | | Yahoo!ブックマークに登録 | | | [...]
on 31 3月 2008 at 16:31 4.CakePHP 携帯専用サイトを作成する | Sun Limited Mt. said …
[...] CakePHP で携帯用のページを作成する際に CakePHP 携帯用ビューを表示する | Shin x blog のページが大変参考になります。 [...]
on 01 4月 2008 at 10:23 5.CakePHP 携帯でセションを有効にする | Sun Limited Mt. said …
[...] 携帯サイトと PC サイトが共存しているときの携帯用のビューを表示させる方法は下記が参考になります。 CakePHP 携帯用ビューを表示する | Shin x blog [...]
on 05 9月 2008 at 20:04 6.toyosystem | CakePHP1.1でキャリアごとの絵文字を表示 said …
[...] バッファをためて一括で変換しています。絵文字と一緒に全角カナも半角カナに直してしまいます。 $this->params["webservices"]で判別しているのはShin x blogさんの「CakePHP 携帯用ビューを表示する」を使用して携帯のビューを切り替えているからです。 [...]