Posts tagged cache
IE で CSV がダウンロードできない問題
1OpenPNE の管理画面からメンバー情報を CSV ファイルとしてダウンロードする機能があります。その CSV ダウンロードが IE6 でエラーになってダウンロードできない問題がありました。
原因はマイクロソフトのサイト Content-Disposition: attachemnt と Cache-Control: no-cache によるダウンロードの問題 に書かれていました。
対処方法として、
webapp/modules/admin/do/csv_member.php を webapp_ext/modules/admin/do/csv_member.php にコピーして
header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=member.csv");
となっているところを下記のように修正します。
header("Pragma: public"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=member.csv");
これでダウンロードができるようになります。
なお、Content-Disposition: attachemnt と Cache-Control: no-cache によるダウンロードの問題 では現象が発生するブラウザとして
?Microsoft Internet Explorer 5.0
?Microsoft Internet Explorer 6.0
?Microsoft Internet Explorer 6.0 Service Pack 1
と書かれていましたが、 IE6 の SP2 でも同様の現象が発生しました。
CakePHP 保存したデータをすぐに find したい場合キャッシュを OFF にする
1CakePHP で保存したデータをすぐにfind するとキャッシュが効いている為に保存したばかりのデータを取得することができません。
その場合はキャッシュを OFF にすることにより新しいデータを取得することができます。
$this->Model->cacheQueries = false;
CakePHP キャッシュファイルの使用
1CakePHP でキャッシュを使用するときに便利なグローバル関数があります。
- cache($path, $data, $expires, $target)
- $data のデータをキャッシュします。
キャッシュする場所は
$target==”cache” なら /app/tmp/cache/ + $path
$target==”public” なら /webroot/ + $path
になります。$target を指定しなければ $target==”cache” です。
$expires はキャッシュの有効期間です。
内部で
$expires = strtotime($expires, time());
が行われるので、strtotime の Data input formats 形式に準拠したものでなければいけません。
デフォルトは $expires = ‘+1 day’ です。 - clearCache($params, $type, $ext)
- $paramsが文字列でキャッシュディレクトリかファイル名にマッチする場合はキャッシュから削除されます。
$params が配列の場合は配列内の文字列全てに対して上記の処理が行われます。
対象のディレクトリは $type で指定します。
$type のデフォルトは ‘views’ です。
対象ディレクトリは /app/tmp/cache/ + $type になります。
cache 関数で ‘public’ を指定した場合のクリアはこの関数ではできないようです。
結構簡単にキャッシュ処理ができそうです。
CakePHP で Smarty を使用するメモ
3Smarty を CakePHP で使用する方法を調べたメモ
Smarty の用意
Smarty ディレクトリを/vendors ディレクトリへコピー
/vendors/smarty/Smarty.class.php
のようになる。
Smarty が使用するディレクトリを作成
/app/tmp/smarty/cache/ /app/tmp/smarty/compile/
Smarty 用の View クラスの準備
レンダリングを任せる Smarty View Class を設定します。
Smarty View Class をダウンロードして smarty.php とリネームして
/app/views/
に配置する。
smarty という名前のサブディレクトリを使用しないなら
$this->subDir = 'smarty'.DS;
をコメントアウトする。
また、
$this->Smarty->assign_by_ref('view', $this);
を
$this->Smarty->assign_by_ref('this', $this);
に変更する。
この変更はテンプレートの中で $this を .thtml と同じように使用したい場合に必要。
AppController の設定
/app/app_controller.php
を作成
class Appcontroller extends Controller{ var $view = "Smarty"; }
実際の使用
view に .tpl があれば Smarty テンプレートとして処理を行い、なければデフォルトの .thtml を表示するようになる。
.tpl の中では .thtml で使用できるヘルパーも使用できる。
.thtml の「<?php echo」を「{」、「;?>」を「}」にすればほぼそのまま利用できる。
ただ、.thtml で HTMLヘルパーを使用している場合
{$html->input('Post/name', array('size'=>'30'))}
のままでは、array(…) でエラーになる。
これを修正するには、Smarty のプラグインを使用して解決する。
プラグインをダウンロードして function.assign_assoc.php にリネームして
/vendors/samrty/libs/plugins/
に配置する。
テンプレートの先頭で
{assign_assoc var='ArrayName' value='size=>30'}
などとして
{$html->input('Post/name', $ArrayName)}
とすればOK.
ただ結構最後のやつが面倒かも。。。