Smarty::_get_auto_filename

Smartyテンプレートは、原則的に一ヶ所にまとめる必要がある。たとえ分けて置く場合でも、各々のテンプレートのファイル名は一意である必要がある。どうにも不自由な仕様だ。
関連する部分のソースを読んでみたところ、該当する処理が _get_auto_filename 関数の中にあった。

Smartyは、テンプレートをコンパイルした結果を、特定の作業ディレクトリに生成する。コンパイル結果のファイル名は、テンプレートのファイル名をCRC32ハッシュすることで生成される。
このとき、テンプレートのファイル名をフルパスで処理していないことが原因とわかり、継承先のクラスで _get_auto_filename をオーバライドしてみた。

public function _get_auto_filename ($base, $source = null, $id = null) {
  if (!Toolkit::isPathAbsolute($source)) {
    $source = preg_replace('/\/*$/', '/', $base) . $source;
  }
  return parent::_get_auto_filename($base, $source, $id);
}

まぁ、やっつけ仕事なハックですが。

トラックバック

コメント


コメントはすぐには反映しません。
ほぼ毎日チェックしていますが、翌日以降の反映となることもあります。

Twitter