baserCMSを利用したウェブサイトリニューアル時に、リニューアル以前のcss、jsの影響を受けて意図しない表示崩れが発生することがありました。
それでその対処策考えてみた件。
想定している対象者
- baserCMSでウェブサイトを制作をしている方
- リニューアル時に、旧cssの影響を受けて表示崩れが起きたことがある方
発生状況
- baserCMSで制作しているウェブサイトを、ドキュメントルートの切替えで公開サイトを切替えたとき
環境
- 普通のLAMP
- PHP 5.2.6
- baserCMS 3.0.2, 4系
原因
ドキュメントルート切替時リリースの際、css、js のキャッシュが効くことにより、本来表示されるべき改修後表示に影響が出ることがある。
対処
読込URLに、ファイルの最終更新日時のタイムスタンプのクエリーを付与し、閲覧者のキャッシュを強制的に上書きさせる。
サンプルは以下。
<link rel="stylesheet" type="text/css" href="/css/style.css" />
<script type="text/javascript" src="/js/script.js"></script>
↓↓↓↓↓
<link rel="stylesheet" type="text/css" href="/css/style.css?1437808354" />
<script type="text/javascript" src="/js/script.js?1435806062"></script>
処理の作成
/app/Config/install.php or /app/Config/setting.php
<?php
Configure::write('Asset.timestamp', 'force');
?>
Asset.timestamp について
- core.php に備わっている
- true を設定すると、debug mode が1以上の場合に適用される
- force を設定すると、debug mode の値に関わらず常に適用される
その他
- 単一で部分的に利用するときはこんな感じかなぁ
<link rel="stylesheet" href="/css/style.css<?php echo '?' . @filemtime(WWW_ROOT . CSS_URL . 'style.css'); ?>">
注意点
- ヘルパ経由で読み込んでいる箇所には適用されるけど、jsで動的に付与したり、直書きしている箇所には適用されません。
- 適用後は「サーバーキャッシュの削除」を実行し、一度ビューキャッシュを削除しましょう。