cakePHP1.3再入門#4 Ktaiライブラリと振分け
pearのNet_UserAgent_Mobileを使用して、携帯とPCのアクセスを振り分ける目論見でしたが、携帯用のページ作成には振り分けだけでなくいろいろな機能が必要だと勉強すればするほど理解しました。(某辞任表明首相風)
そういうわけでcakePHPにも利用しやすいKtaiライブラリの導入を決めました。
ECWorks Blogからダウンロードできます。
インストールと言うか、ダウンロードしたファイルを解凍してcakePHPの対象フォルダにコピーするだけです。
テンプのreadmeをよく読めば設置は難しくないですね。
ただ、今回は携帯からのアクセスとPCからのアクセスで異なるViewを表示したいことと、アドレスを分けたくなかったので
ちょっと工夫が必要でした。
/app/controllersにコピーしたAppControllerの中に必要な設定をコピーします。
ここで、コントローラ内にbeforeRender()を追加します。
function beforeRender() { parent::beforeRender(); if ( in_array('Ktai', $this->components) && $this->Ktai->is_ktai() ) { // Viewのパスへの書き換え $view_paths = App::path('views'); $result = array_search(ROOT.DS.APP_DIR.DS.'views'.DS, $view_paths); if ($result !== false) { $view_paths[$result] = ROOT.DS.APP_DIR.DS.'views_mobile'.DS; } App::build(array('views' => $view_paths), true); } }
同じクラス内で
var $components = array('Ktai');
としているのでif文のコンポーネンツ判断はいらないですね。
参考にしたサイトの記述ではここのif文がarray_key_existsになってて動かなかったのですが
$componentsは[0]->”Ktai”のようになっていてKeyサーチではtrueになりませんでした。
ここでちょっとはまりました。in_arrayならうまく動作しました。
この記述でPCからなら/app/views/以下のレイアウトとテンプレートを携帯からなら
/app/views_mobile/を見に行ってくれます。
/app以下のAppControllerを変更しただけなので、トップページの場合はこのAppControllerを継承した
PagesControllerを/app/controllers/に作成します。
あとは/app/views_mobileとそれ以下の必要なフォルダを作成してdefault.ctp home.ctpなどを携帯専用として作成すればOKです。
とりあえずiMode HTMLシュミレータではうまく動作しました。