ちょっとはまったのでメモ。
CakePHP1.2で携帯サイトを作る時には、
Ktai Library for CakePHP1.2を使って、携帯サイト用にViewディレクトリを設定する説明しているサイトが多いんですが、その状態でThema(テーマ)機能を使うとちょっと気持ち悪くなります。
■前提
携帯サイト用にViewディレクトリを設定するのはこんな感じ。
# app/app_controller.php
function beforeRender()
{
...
parent::beforeRender();
if (IS_MOBILE) {
$config = Configure::getInstance();
array_unshift($config->viewPaths, ROOT.DS.APP_DIR.DS.'mobile_views'.DS);
}
...
}
■Themaを使っていない場合のViewを探しに行く順番
1.app/mobile_views
2.app/views/
3.cake/libs/views/
■Themaを使っている場合のViewを探しに行く順番
1.app/mobile_views/themad/{thema_name}/
2.app/views/themad/{thema_name}/
3.cake/libs/views/themad/{thema_name}/
4.app/mobile_views/
5.app/views/
6.cake/libs/views/
気持ち悪くない?
出来ればこんな感じが良いんです。
■Themaを使っている場合のViewを探しに行く順番(希望案)
1.app/mobile_views/themad/{thema_name}/
2.app/mobile_views/
3.app/views/themad/{thema_name}/
4.app/views/
5.cake/libs/views/themad/{thema_name}/
6.cake/libs/views/
が、これをやるにはちょっとメンドクサイ気がしたし、そもそも携帯用のテンプレートとPC用のテンプレートは全く違うルールでコーディングされているので、 以下の様になればいいやと思うことにしました。
■Themaを使っている場合のViewを探しに行く順番(最終案)
1.app/mobile_views/themad/{thema_name}/
2.cake/libs/views/themad/{thema_name}/
3.app/mobile_views/
4.cake/libs/views/
ということで、以下のようにすれば良い。
# app/app_controller.php
function beforeRender()
{
...
$config = Configure::getInstance();
- array_unshift($config->viewPaths, ROOT.DS.APP_DIR.DS.'views_mobile'.DS);
+ $result = array_search(ROOT.DS.APP_DIR.DS.'views'.DS, $config->viewPaths);
+ if ($result !== false) {
+ $config->viewPaths[$result] = ROOT.DS.APP_DIR.DS.'views_mobile'.DS;
+ }
...
}
これは好みが分かれるやり方だろうなー。
けど、Thema機能はとにかく便利、助かります。