2011年02月04日

cakephp theme を使った場合の view cache

お願いします♪いいねとかつぶやいたりして下さい
 
以下全て嘘です。
http://www.hideblog.net/nikkis/show/186/

の上記をご覧下さい。解決方法があります。











テーマに m などを付けた場合、つまりcakephp1.3で携帯サイトを作って、
さらにキャッシュ機能を付ける場合、携帯サイトだろうがPCサイトだろうが同じビューになってしまう。

で、PC用はPC用のビュー、携帯用は携帯用のビューと分けて作る方法をまとめた。

と思ったけど、携帯は機種毎にビューの表示を分けているのでビューキャッシュできないので、携帯からのアクセスの場合は
ビューキャッシュを取らず、使わずということにした。

またなぜかdebugが2でもキャッシュをしちゃうので、debugが0のとき以外はキャッシュしないように
改造しちゃいました。

参考:http://text.tklabo.net/blog/20/change_filename_of_view_cache

キャッシュヘルパーを書き換える



○/app/views/helpers/cache.php(cake フォルダからコピる)
208行目らへん
$path = $this->here;
if ($this->here == '/') {
    $path = 'home';
}

$cache = strtolower(Inflector::slug($path));

//これで携帯からのアクセス、またはデバッグ0の時はキャッシュを取らない
if (empty($cache) || Configure::read('debug') != 0 || isset($this->theme)) {
    return;
}


DispatcherとBootstrapをコピー


○/cake/dispatcher.php
○/cake/bootstrap.php



○/app/libs/フォルダへ突っ込む

dispatcher.php の cached 内を変更



○/app/libs/dispatcher.php 523行目らへん
function cached($url) {
//debugが0の時のみ、キャッシュを使う
if (Configure::read('Cache.check') === true && Configure::read('debug') == 0) {
    $path = $this->here;
    if ($this->here == '/') {
        $path = 'home';
    }
    
    require_once(VENDORS.'ecw'.DS.'lib3gk.php');
  $lib3gk = new lib3gk();
    //携帯からのアクセスの場合はキャッシュを使わない
    if($lib3gk->is_ktai()){
        return false;
    }

    
    $path = strtolower(Inflector::slug($path));

    $filename = CACHE . 'views' . DS . $path . '.php';

    if (!file_exists($filename)) {
        $filename = CACHE . 'views' . DS . $path . '_index.php';
    }

    if (file_exists($filename)) {
        if (!class_exists('View')) {
            App::import('View', 'View', false);
        }
        $controller = null;
        $view =& new View($controller);
        $return = $view->renderCache($filename, getMicrotime());
        if (!$return) {
            ClassRegistry::removeObject('view');
        }
        return $return;
    }
}
return false;
}


bootstrap.php に一行追加



○/app/config/bootstrap.php のどこでもOK
App::import('Lib', 'Dispatcher');


○/app/libs/bootstrap.php 最後の一行をコメントアウト
// require CAKE . 'dispatcher.php';


○/app/webroot/index.php
下記のように変更
//if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {
if (!include(APP_PATH . 'libs' . DS . 'bootstrap.php')) {


bootstrapが2種類出てくるので要注意。

またdispatcher.phpだと携帯かどうかを判断できないので強引に読み出して判断する必要がある。
にしてもテーマの情報が少ないのでみんなまだつかってないのかなぁ。
関連するタグ: PHP cakephp
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




ライブラリを配布しちゃったり
webデザイン
Fireworks
HTMLコーディング
CSS
Dreamweaver
携帯サイト
webプログラム
PHP
正規表現
cakephp
MYSQL
javascript
webマーケティング
adwords
analytics
windows7
ショートカットキー
おすすめ情報
サイト
facebook
ライブラリ
配布
アプリ
iphone
ipad
サーバー
さくらサーバー
全ての記事を読む




トップ - 最新の記事一覧 - お問い合わせ