Smarty テンプレート が コンパイル (更新) されない

今回の依頼案件で、一番はまったのがこれ… Smartyのテンプレートファイルを作成して、そのテンプレートを使用したページを作成しても、コンパイルされず… コンパイルフォルダに更新されたファイルが生成されない。

普通に…

$smarty = new Smarty();

$smarty->template_dir = '~';
$smarty->compile_dir = '~';
$smarty->cache_dir = '~';
$smarty->config_dir = '~';

$smarty->display('~.tpl');

のように使用するぶんには、なんら問題なくテンプレートがコンパイルされ、意図したとおりにページが表示されるのですが、今回、移植しようとしているシステムは、テンプレートがコンパイルされず、ページが表示されません。

このシステムは、Pear::Auth による認証を使っているため、認証されない場合は、毎度「ログインページ」が表示されるので、各 PHP スクリプトは、$smarty->display(‘~.tpl’); まで、たどり着かない。また、tplファイルに別のtplファイルがインクルードされていることも、意図したようにテンプレートファイルがコンパイルされない原因になっている様子です。

そこで、検討した結果、次のように強引に?コンパイルファイルを生成すれば良いことが分かりました。

テンプレートファイル→コンパイル後テンプレートファイルを生成するには、とにかく一度テンプレートファイルを呼べば良いようです。

具体的には… test.tpl というテンプレートファイルをコンパイルしたい場合、test.tplには、さまざまな変数が埋め込んであり、実際には、

$smarty = new Smarty();
$smarty->assign('val1', '~');
$smarty->assign('val2', '~');
$smarty->assign('val3', '~');

$smarty->display('test.tpl');

のように使われるとしても…
とにかく、

$smarty = new Smarty();
$smarty->display('test.tpl');

のようにして、コンパイルしたい.tpl ファイルを参照した PHP ファイルを作成して、コンパイルされたファイルを生成してしまえばOK!

特に… ページのヘッダおよびフッタを別の .tpl ファイルにして、メインの .tplファイルに include している場合、メインの .tpl ファイルはコンパイルされるが、include している .tpl がコンパイルされない!というような症状に出会った場合に、そのヘッダおよびフッタのテンプレートファイルを「単独」で呼ぶことによって、コンパイルされたテンプレートファイルが生成され、期待通りにヘッダ&フッタを表示させることが出来ました。

タグ:

コメント / トラックバック1件

コメントをどうぞ