LoginSignup
4
3

More than 1 year has passed since last update.

[baserCMS] サイトリニューアル時にcss、jsを強制的に再読み込みさせて、過去のキャッシュを利用させないようにする

Last updated at Posted at 2015-07-25

baserCMSを利用したウェブサイトリニューアル時に、リニューアル以前のcss、jsの影響を受けて意図しない表示崩れが発生することがありました。
それでその対処策考えてみた件。

想定している対象者

  • baserCMSでウェブサイトを制作をしている方
  • リニューアル時に、旧cssの影響を受けて表示崩れが起きたことがある方

発生状況

  1. 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で動的に付与したり、直書きしている箇所には適用されません。
  • 適用後は「サーバーキャッシュの削除」を実行し、一度ビューキャッシュを削除しましょう。
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3