CakePHPでモバイルサイト開発 – 1日目 -

さっそくプログラムしていく。

1. prefixを有効にする

prefixを有効にするために [app/config/routes.php] に以下を記述する。

参考 http://phptips.seesaa.net/article/102607319.html

[app/config/routes.php]

この設定により、/m/にアクセスすると、prefixに指定した接頭語がついたメソッドが実行される。

PCページとモバイルページでURLを変えたいときに使える。

※今回やりたいことには必要ない気もしたが、せっかくなので使ってみた。

2. アクションをつくる

1のprefixが有効ならば、/m/にアクセスすると[prefix_action]メソッドがよみこまれる。[/m/hoge/foo]にアクセスするためのアクションを例に示す。

3. ビューをつくる

ビューに関しても[prefix_action]でビューを用意すればOK。

2に対応したビューが欲しいときは、[app/views/hoge/mobile_foo.ctp]を用意しよう!

4. レイアウトをつくる

今回はdocomo向けページをつくります。

XHTML1.0で、文字コードはShift_JISにします。

[app/views/layout/mobile_base.ctp]

あとは必要なときにレイアウトをよべばOK。

controllerで[$this->layout = 'mobile_base']とかすれば大丈夫!

5. 表示をととのえる

これでOKだろうと思い、モバイルのページを用意してアクセスしたところ、styleが反映されていなかった。

どうやら、サーバー側で正しいHTTPヘッダが送られていないらしい。

.htaccessに[AddType application/xhtml+xml .html]を追加すればいいらしいが、今回はheaderメソッドを使った。

styleは反映されたが、今度は文字化けがおこった。

文字コードはEUC-JPのPC向けページと同じところにつくっているせいか、EUC-JPで出力されているみたいだ。

なんとかShift_JISで表示させるために、ob_start()で出力をバッファに記憶して、ob_get_contents()で取り出した文字列をmb_convert_encodingしてみた。

参考 http://www.ideaxidea.com/archives/2008/04/phpob_start.html

[app/views/layout/mobile_base.ctp]

これで期待通りの表示を得ることが出来た!

今日やったのはとりあえずここまでです。

6. おまけ

アクセスをdocomoのIPアドレスのみに制限するメソッドを書いた。

今思ったけど、$_SERVER['REMOTE_ADDR']に何回もアクセスするのってどうなんだろうか?

$access_id = $_SERVER['REMOTE_ADDR'];

とかして、変数に入れてforeachしたほうがいいかなー。

Pocket

Posted in CakePHP.

CakePHPでモバイルサイト開発 – はじめに -

CakePHPでモバイル向けのページをつくることになったのでいくつかメモ。

今回つくるのはdocomo向けのページ。

なので、キャリア間のHTMLの違いとか気にしなくていい。

※今後もdocomo以外は対象外なので、完全にdocomo向けでいくよ。

まず、docomoのiモード向けページの仕様が提供されているので目を通す

http://www.nttdocomo.co.jp/service/imode/make/content/browser/html/

ふむふむ。

まぁ、なんとなくしかわかんないけど重要そうなのをピックアップ。

・ 全機種で、使用可能な文字コードはShift_JIS、画像はGIFです。

・ Content-Type http://www.nttdocomo.co.jp/service/imode/make/content/browser/html/notice/basis/index.html#p05

・ XHTML http://www.nttdocomo.co.jp/service/imode/make/content/browser/xhtml/about/index.html

文字コードをShift_JISにして、XHTML1.0でContent-Type、DOCTYPE宣言、XML宣言の指定とかを適切のやってやればいけそうな予感。

次に、CakePHPでのモバイル向けページの開発についての記事をいくつか読む。

http://phptips.seesaa.net/article/102607319.html

http://www.1×1.jp/blog/2008/04/cakephp_12_routing_prefix.html

http://www.syuhari.jp/blog/archives/168

http://dspt.blog59.fc2.com/blog-entry-36.html(おまけ)

なるほど。

今回はPCのページと連携したページを1ページつくるだけなので、Net_UserAgent_Mobileは使わずにいく。

さて、プログラムを書いていく。

と、思ったが長くなったので次の記事から開始しよう!

Pocket

Posted in CakePHP.

CakePHPでInflectorクラス

文字列を複数形にしたり、キャメルケースにしたり、アンダースコア区切りにしたり、便利な文字列操作が出来るクラス。

id:ym1173さんの記事でまとめられてるので、使い方はそちらを参照。

http://d.hatena.ne.jp/ym1173/20090917/1253155625

今回このクラスを調べたのは、モデル名を小文字&アンダースコア区切りに変換したかったから。

例えば、「HogeFooBar」→「hoge_foo_bar」みたいな感じ。

CakePHPだと「Inflector::underscore」を使います。

せっかくなので、自分でも変換メソッドを書いた。

なんか無理やり??

Pocket

Posted in CakePHP.