2010-06-17 06:23:56
サイトにPC用と携帯用がある場合、PC用とは別に携帯用の表示を行う方法です。この方法なら同じコントローラ・アクションで、レイアウトとビューファイルを変更することができます。なお携帯版のURLは[/m/]で始まるようにします。
1.URLルーティングを設定する。
[app/config/routes.php]で[/m/]からURLが始まる場合にwebservicesとして扱うように設定します。
[app/config/routes.php]
PHP:
-
<?php
-
(snip)
-
$Route->
connect('/m/:controller/:action/*',
array('webservices' =>
'Mobile'));
-
?>
2.WEBSERVICESを有効にする。
webservicesがフレームワーク内でサポートされるように設定を変更します。
[app/config/core.php:123行目付近]
PHP:
-
/**
-
* 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:
-
<?php
-
class MobileComponent extends Object
-
{
-
}
-
?>
[app/views/helpers/mobile.php]
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/]へ飛ばす設定にしておく、という方法もありです