テンプレートキャッシュについて
テンプレートキャッシュについて詳しくご紹介します。
テンプレートキャッシュを有効にする
「private/config.system.yaml」に以下の記述をすると機能が有効化されます。
template_cache: on
3系の「config.system.yaml」はデフォルトで、テンプレートキャッシュが有効になっています。よって2系からのアップデートの場合は、通常「config.system.yaml」を更新しないため、テンプレートキャッシュはオフの状態となっております。
また「DEBUG_MODE」時はテンプレートキャッシュが有効になりません。 テンプレートキャッシュを使いたい場合は「config.server.php」で「DEBUG_MODE」を「0」にしましょう。
define('DEBUG_MODE', 0);
テンプレートキャッシュが使える条件(制限事項)
テンプレートキャッシュを有効にすると、テンプレートの作り方に制限が設けられます。
具体的には、インクルード文の中に使用できるグローバル変数が限定されます。
<!-- 以下のようなインクルード文で使用するグローバル変数が限定されます。 -->
@include("/admin/entry/bcd/%{BCD}.html")
使用できるグローバル変数
- %{ECD}
- %{BCD}
- %{PBCD}
- %{RBCD}
- %{CCD}
- %{PCCD}
- %{RCCD}
- %{ALIAS_CODE}
- %{IS_ADMIN}
- %{MODULE_NAME}
- %{MODULE_ID}
- %{ADMIN_PATH}
- %{ADMIN_PATH_MID}
- %{CATEGORY_LEVEL}
以下のような 正規表現 で全文検索すると、インクルード文の中でグローバル変数を使っている箇所を検索できます。 (@include方式のみ)
@include\(['"][^'"]*%\{[^\}]+\}
テンプレートキャッシュが有効時は、テンプレートを編集しても反映されません。
開発環境では「DEBUG_MODE」をオンにしてキャッシュされないようにして作業し、本番環境では「DEBUG_MODE」をオフにしてテンプレートキャッシュを有効にするのがいいでしょう。
本番環境反映時には、ダッシュボードからテンプレートキャッシュのクリアを忘れないようにしましょう。
インクルード文で使用できるグローバル変数の追加
Ver. 3.1.0 でインクルード文で利用できるグローバル変数を追加できる仕組みが追加されました。(カスタムグローバル変数も可)
「Hook.php」を修正することにより、インクルード文で使えるグローバル変数を追加します。
extension/acms/Hook.php の「addGlobalVarsInIncludePath」メソッド
/**
* テンプレートキャッシュ有効時に、
* インクルードのパスで使用できるグローバル変数を設定
*
* ページ毎に値が違うようなグローバル変数を設定しないでください。
* 値別にキャッシュが作成されるので、値の種類が多いとキャッシュの意味がなくなります。
*
* @param array $globalVarNames
*/
public function addGlobalVarsInIncludePath(&$globalVarNames)
{
$globalVarNames = ['SESSION_USER_AUTH', 'HOGE']; // 例)インクルード文に %{SESSION_USER_AUTH} と %{HOGE} を使えるようにする
}
上記のコードのように、配列の形でグローバル変数名を指定します。すでにあるグローバル変数や「Hook.php」で追加したカスタムグローバル変数でも指定可能です。