• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP Smartyについて質問です。)

PHP Smartyに関する質問

このQ&Aのポイント
  • PHP Smartyについて質問です。DBで保存しているコンテンツをSmartyのコンパイラに通す方法はありますか?
  • 質問内容は、レイアウトファイル(main.tpl)に配置されている特定のタグを、DBのデータで置換したいというものです。
  • 一般的な方法としては、tplファイルにDBのコンテンツを書き出し、Smartyのfetchメソッドで読み込む方法がありますが、DBから直接コンパイルしたい場合にはどうすれば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

それっぽいの発見 http://www.smarty.net/docs/ja/template.resources.tpl 「文字列からのテンプレート」 この辺じゃないかな?僕自身やったことないけどw

chris2525
質問者

お礼

ご回答ありがとうございます。 なるほど、やはりテンプレートを一度書き出してそれを読み込むしかなさそうですね。 参考URLもありがとうございます! 一度こちらのメソッドをざっと読んで、出来なさそうであればファイルを作成し、それを読み込ませる事にします(^o^) muuming2001さん、色々と教えてくださいましてありがとうございましたm(_ _)m

その他の回答 (3)

回答No.3

>>$db_contentsに含まれている{if}構文や{foreach}構文 やっと状況を理解しました。 そんなことやったこと無いなぁ。 無難に考えるなら、一旦一時ファイルとして書きだして、それをテンプレートとして読み込むかなぁ。 http://www.smarty.net/docs/ja/api.functions.tpl ここらへん読み込んだら、多分 その{if}やらが出てるデータをテンプレートデータとして直接読み込ませることも 多分出来ると思う。(予想です・・・

chris2525
質問者

お礼

ベストアンサー後にすみません(汗) 今までヤフ知恵しか使ったことがなかったので使い方が・・・ 出来ました! 先ほどmuuming2001様が教えてくださった「文字列からのテンプレート」の箇所を見て、バッチリ期待通りの動きをしてくれました! 本当にありがとうございます(T_T)

回答No.2

んん???? 普通に $smarty->assign(~~~) じゃダメなのかな? #CONTENTS# の部分をスマーティー向けに{$contents}とかに書き換える必要はあるけど。

chris2525
質問者

お礼

ご回答ありがとうございます。 #CONTENTS#の部分をおっしゃられた通り、$contents}に書き換え、以下の文も書き足しました。 $smarty->assign('contents', $db_contents); するとキレイに置換されたのですが、$db_contentsに含まれている{if}構文や{foreach}構文が評価されずに、そのまま文字列として出力されてしまいます。 これを回避するにはやはりDBに保存せず、tplファイルとして保存して読み込むしかないですかね(T_T) なお、先ほどの補足の末尾にて echo $db_contents; と記述しましたが echo $contents; の誤りです、申し訳ありません。

回答No.1

ご質問の意味をもう少し教えてくだし。 画面表示のHTMLはPHPなどの動的プログラムを通さず静的に表示して、 ページ内の一部のデータのみを差し替える形を取りたいということでしょうか?

chris2525
質問者

補足

説明不足でした、申し訳ありません。 画面表示のHTMLはPHPプログラムを通して、表示しようと思っています。 ちなみに置換プログラムはこのような感じです。 $db_contents; # データベースから取得した置換用データ $layout = $smarty->fetch('main'); # $contents = str_replace("#CONTENTS#", $db_contents, $layout); echo $db_contents; よろしくお願いいたします。

関連するQ&A