人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Smartyの使い方について相談です。

私はSmartyに反映させるテンプレートをデータベース(MySQL)に保存し、
テンプレートのソースを変数に入れて出力しています。

簡単な例です:
$sql = "SELECT * FROM template";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
$body_var = $row["body"];
$body = $Smarty->fetch("var:body_var");
echo $body;


これでデータベースに保存していたテンプレートは出力されますし、その中にSmarty用のタグを埋め込めば反映できます。
しかし、こういう使い方の場合「template_dir」や「compile_dir」というテンプレートを保存するフォルダが必要ありません。
しかし、これらのディレクトリを指定しないと、Smarty上でエラーになります。

そこで質問ですが、テンプレート用のフォルダを作成しなくてもエラーにならない方法を教えて下さい。
(私がSmartyの使い方を誤認している場合もご指摘下さい)

●質問者: k27w
●カテゴリ:ウェブ制作
✍キーワード:BODY echo MySQL SELECT Smarty
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● bayan
●35ポイント

$body = $Smarty->fetch("var:body_var");

変数からテンプレートを取得するようなリソースプラグインを

用意されているのでしょうか。便利そうですね。


[1] template_dir


テンプレートを全てデータベースに格納して、PHPの変数経由で渡す

ということであれば、テンプレートファイル を格納する template_dir は

不要になると思います。

template_dir は指定しなければ ./templates になりますが、

ディレクトリが無くてもエラーにはならないと思いますがどうでしょう。


[2] compile_dir

こちらは Smarty がテンプレートをコンパイルした結果を

保存しておくディレクトリですね。


compile_dir は指定しないと ./templates_c になりますが、

ディレクトリがないと fetch() を呼んだ際に Fatal error になりました。


Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist, or is not a directory.

マニュアルをざっと読んだ限りでは、コンパイル済みテンプレートを

作らせないフラグ、みたいなものは見つかりませんでした。

テンプレートをPHPのコードにコンパイルして保存しておき、

変更されるまで再利用するという Smarty の仕組みからして、

compile_dir は欠かせないのではないかなぁと思います。


http://ml.php.gr.jp/pipermail/php-users/2004-April/021876.html

http://www.smarty.net/manual/ja/

◎質問者からの返答

詳しい解説ありがとうございます。参考にさせていただきます。


2 ● りゅう
●35ポイント

Smatyにはテンプレートリソースという機能があって、テンプレートの取得方法をプラグインで拡張できるようになっています。

テンプレートを変数に入れて渡すのは、そういうプラグインを入れて実現しているのだと思います。

参考:http://www.smarty.net/manual/ja/template.resources.php


で、template_dirを使うのは組み込みのfileリソースですが、

このリソースタイプを無効にする方法は無いので、たとえ使わなくてもtemplate_dirを用意する必要があります。


Smartyはコンパイル済みのテンプレートをキャッシュしようとします。

この挙動はリソースタイプによらず共通なので、compile_dirは常に必要です。


というわけで、両方作っておく必要があります。

◎質問者からの返答

やっぱり、最低限「compile_dir」は必要なんですね。

そう認識したいと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ