cssのリクエストURLにGet引数を足してブラウザキャッシュを制御
Cakephpのhtml helperを使ってGet引数を追加する
ブラウザ側のキャッシュ機能が有効になっているため、変更したはずのcssが反映されないというミスを未然に防ぐ必要があります。
cssやjsのリクエストURLにランダムな引数を追加して防ぐ方法は以前から活用されていて、それをCakephpのhtmlヘルパーで行う方法になります。
Cakephp1.2系と2系ではhtmlヘルパーの利用の仕方が少し異なっています。
1.2系
echo $html->css('cake.generic.css'.'?'.time());
2系
echo $this->Html->css('cake.generic.css'.'?'.time());
上のhtmlヘルパー関数は、以下のHTMLを出力します。
<link rel="stylesheet" type="text/css" href="/css/cake.generic.css?1386208939" />
ランダムな文字列を出力するPHP関数であれば同じことができます。rand関数やmt_time関数を使って同様の効果を得ることが可能です。
echo $this->Html->css('cake.generic.css'.'?'.rand());
echo $this->Html->css('cake.generic.css'.'?'.mt_rand());
検索エンジンに対してはランダムな引数を渡さない方が良いかもしれない
一点注意点というか気になっている点としては、検索エンジンのbotに対しては、ランダムな引数なしの純粋なcssなりjsファイルを読むようにしておいたほうが無難かもしれません。そのため、運営する一つのサイトでは、以下のようにしています。
if ( strpos($_SERVER['HTTP_USER_AGENT'], "bot") !== false ) { echo $this->Html->css('cake.generic'); } else { echo $this->Html->css('cake.generic.css'.'?'.time()); }
ユーザーエージェントがgooglebotなどの場合には、ピュアなcss(Get引数なし)を読むためのHTMLを出力するように条件分岐しています。ランダムな文字列を追加する場合と追加しない場合とで、Cakephpのhtmlヘルパー関数に渡す引数の値(cssファイル名の指定方法)が異なる点に注意が必要です。
上のように設定しなかった場合、botは繰り返しランダム文字列付のcssにリクエストを繰り返し行いますので、クローラビリティの観点から問題が生じるかもしれません。そのような懸念に対する対策として、botに対しては引数なしのURLを出力しておいたほうが良いかもしれません。