Home > CakePHP | PHP > CakePHP 携帯用ビューを表示する

CakePHP 携帯用ビューを表示する

この記事の所要時間: 245

サイトに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/]へ飛ばす設定にしておく、という方法もありです。

Pocket

follow us in feedly

コメント (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
http://www.1x1.jp/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 携帯用ビューを表示する」を使用して携帯のビューを切り替えているからです。 […]

Home > CakePHP | PHP > CakePHP 携帯用ビューを表示する

検索
フィード
メタ情報

Return to page top