‘Smarty’ タグのついている投稿

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

2008年12月29日 月曜日

今回の依頼案件で、一番はまったのがこれ… 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 がコンパイルされない!というような症状に出会った場合に、そのヘッダおよびフッタのテンプレートファイルを「単独」で呼ぶことによって、コンパイルされたテンプレートファイルが生成され、期待通りにヘッダ&フッタを表示させることが出来ました。

PHP Smarty

2008年12月24日 水曜日

私の仕事の大部分は、他の人が作ったプログラムを解析&改良することで… 特に、自分が知らない技術を使ったプログラムを読み解いていくことを得意としております。

基本的には、分野は何でも良くて… 知らないことを知りたいという探究心が人一倍強いように思います。

他のサーバーで稼動しているPHPで書かれたシステムを別のサーバーへ移設しようとしているのですが、この類の作業(Web系システムの移設)は、環境(Apache,PHP,MySQL等のバージョン、インストールされているモジュール類など)が異なると動作しないので、いつもとても大変です。

今回のシステムは、ドキュメントがなく、ソースから順番に読み解いてます。

PHPは、開発ツールが豊富!それらを組み合わせることによってシステム構築が容易になるので、それぞれが得意なライブラリを使うようなのですが… 私は、何か新しいシステムに着手する度に、毎度、新しいことを覚えて(させられて?)いるように思います。

今回は、これ 「Smarty」 が研究課題となりそうです。

ここの説明が判りやすそう…
http://www.phpbook.jp/smarty/