• 締切済み

smartyについて

smartyにでサイトを作る際のテンプレート構造について質問です。 現在はindex.phpで $smarty->display('hoge.tpl'); としhoge.tplは {include file="./common/header.tpl"} <div id="contents"> {include file="./common/left_side.tpl"} <div id="center"> ここに表示する内容 </div> {include file="./common/right_side.tpl"} </div> {include file="./common/footer.tpl"} のようにしています。 表示する内容はそれぞれ違うものの全てではありませんがincludeする tplは他のページもほぼ同様ですのでもっと効率的にできるのでは?と 思うのですがどんな方法があるでしょうか?

  • dcx147
  • お礼率33% (214/636)
  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

中身を作っておいて外側をレンダリングする。レイアウト機能的な。 {* hader *} <div id="contents"> {* left_side *} <div id="center">{$yield}</div> {* right_side *} </div> {* footer *}

関連するQ&A

  • PHP Smartyについて質問です。

    レイアウトファイル(main.tpl)にタグを配置し そのタグをあるデータに置換したいと考えています。 例えば、以下のような感じです。 ~~~ main.tpl ~~~~~~~~~~~~~~~~ <html> <body> <div id="header">ヘッダー</div> <div id="nav">ナビゲーション</div> <div id="contents">#CONTENTS#</div> <div id="footer">フッター</div> </body> </html> ~~~~~~~~~~~~~~~~~~~~~~~ 上記の「#CONTENTS#」の部分をDBで保存している コンテンツに置換したいのですが {if}構文や{$hoge}などのSmartyタグが文字列として出力されてしまいます。 何か無理やりDBのデータをSmartyのコンパイラに通すメソッド等ありませんでしょうか? もしくは、他のやり方で何かいい方法はありませんでしょうか? DBで保存している部分をtplファイルにして、$smarty->fetch("fuga.tpl"); 等で読みだせば 解決するんですが、どうしてもこのコンテンツ部分はtplファイルにはせず DBから直接コンパイルしたいのです。 どなたかご教授くださいませ。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Smarty includeでテンプレートを読み込めない

    よろしくお願いします。 まずphpファイルから $smarty->display('111/body.tpl');(*111はディレクトリ名) を呼び出して、さらにbody.tplと同ディレクトリにあるcontents.tplを読み込もうとしています。 はじめのbody.tplは読み込むことができブラウザで表示されるのですが、contents.tplは読み込めず、 Warning: Smarty error: unable to read resource: "contents.tpl" in <絶対パス>/Smarty/Smarty.class.php on line 1095 のエラーが出てしまいます。 ちなみに/111/というディレクトリは、$template_dir以下、$template_dir/111/です。 {include file="contents.tpl"} {include file="file:contents.tpl"} {include file="絶対パス/contents.tpl"} {include file="file:絶対パス/contents.tpl"} など試しましたが、ダメでした。 知恵をお貸しください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 共通テンプレートを呼ぶ

    src/common/header.tplを src/hoge/hoge.tplから {include file="../common/header.tpl"} として呼びだしたい。 エラーメッセージが Warning: Smarty error: (secure mode) accessing "../common/header.tpl" is not allowed in C:\php\libs\Smarty.class.php on line 1088 です。 #### 設定 php.ini include_path = ".;C:\php\libs;C:\php\PEAR" safe_mode = Off Smarty.class.php $smarty->template_dir="."; {include file}を絶対パスで記述しても同じエラーです。 おそらくこのsecure modeの設定が正しく設定されていないのでしょうが その設定方法がいまいちよくわかりません。 簡単なことなのかもしれませんが、ご存知の方がいらっしゃいましたら ご教授願えないでしょうか。 よろしくお願いいたします。 環境 Windows XP php-5.0.5 Smarty-2.6.10

    • 締切済み
    • PHP
  • Smartyのエラーが2つずつ出ます

    PHP5+Smartyでサイトを作っています。 「$smarty->display("hoge.tpl");」としてテンプレートファイルを呼び出します。 そのテンプレートファイル「hoge.tpl」が存在しない時に、以下のエラー文が必ず2つ表示されます。 Warning: Smarty error: unable to read resource: "hoge.tpl" in /root/.../smarty/Smarty.class.php on line 1092 一度しか呼び出していないのにエラーが2つ表示されるので、コードの記述ミスかと考えたのですがわかりませんでした。 テンプレートファイルがある場合は、テンプレートが二度呼び出されることはありません。 エラー文にある1092行目からコードを追って見たのですがわかりませんでした。 どうすればエラー表示を1つにできるのでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • 現在PHPとsmartyを勉強しているのですが、config_load

    現在PHPとsmartyを勉強しているのですが、config_loadを利用して#HOGE#をテンプレート内で利用しています。 ここで、{include file="hoge.tpl" title=#TITLE#}のような使い方をしているのですが、title="hogehoge{#TITLE#}"のような使い方はできません。 (TITLEのデリミタ{}を外しても、#TITLE#とそのまま表示されてしまいます。 属性値に{#HOGE#}と文字列を合わせて使うにはどうすればよいか御教示ください。

    • ベストアンサー
    • PHP
  • Smartyのテンプレートにincludeしたファイルを表示したいので

    Smartyのテンプレートにincludeしたファイルを表示したいのですが、うまくいきません。 具体的には、意図しない数値が入ってしまいます。 どうすればよいのでしょうか? ■呼び出す側 require("../../libs/Smarty.class.php"); require_once('../../lib/set_include_path.php'); $header = include("header.php"); $smarty = new Smarty(); $smarty->assign("header",$header); $smarty->display("date.html"); ■テンプレート <body> {$header}<br>日付<br> ■表示例 include("header.php"); の内容が正常表示 1 日付 include("header.php"); の内容が正常表示された後、勝手に「1」と表示されるので、困ってます。表示されないようにするにはどうすればよいでしょうか。 var_dump($header);ってしたところ、int(1) ってなるので、この1が表示されているのかと思うのですが、なんで表示されるのか、表示されないようにするにはどうすればよいか、教えてください。

    • ベストアンサー
    • PHP
  • smarty上で、動的にファイルをインクルードするには

    現在、smartyを使用して、tplファイルを作成しています。 テンプレートファイル内で、条件によって呼び込むファイルを 変更したいのですが、下記のように includeの中で、変数を使う事は出来ないのでしょうか? {include file=$file}

    • ベストアンサー
    • PHP
  • PHP+smartyで文字化け

    PHP+smartyでサイトを作成し始めました。(以下URL) http://babyitem.info/ PHPファイル、テンプレート共に、文字コードはEUCで作成しています。 サーバーは、ロリポップをレンタルしています。 index.phpは以下の通りです。 ----------------------------------------------------------- <?php $contents_title="ベビーアイテム.info"; $tpl->assign("contents_title",$contents_title); $tpl->display("babyitem.tpl"); ?> ----------------------------------------------------------- babyitem.tpl(上記サイト左の部分)は以下の通りです。 ----------------------------------------------------------- <div id="left"> <div class="left_top">{$contents_title}</div> <div class="left_bottom"></div> </div> ----------------------------------------------------------- テンプレートファイルの{$contents_title}に 「ベビーアイテム.info」という文字をassignしているのですが、 文字化けして表示されてしまいます。 ちなみに、「babyitem.info」という文字をassignすると、 そのまま、「babyitem.info」と表示されます。 正しく表示する為には、どの辺りの設定を確認すれば良いでしょうか? ご教授くださいませ。

    • 締切済み
    • PHP
  • メールの本文をSmartyにしたい

    メール送信の本文をSmartyテンプレートにしようと考えています。。 しかし、メールの本文がSmartyのテンプレートの内容ではなく、真っ白になってしまい 困っています。 $body = $smarty->fetch('mail.tpl'); //メールのテンプレートをSmartyで読み込む mb_language('japanese'); mb_internal_encoding('utf-8'); mb_send_mail($to,$subject,$body,$header); //メールの送信 ■メールはきちんと受信できます。 ■Smartyのテンプレートを読み込めていないのかと思い、 $bodyをprint($body)で確認しましたが、テンプレートの内容がきちんと表示されました。 ■$body = "テスト"; と入力し、メールを送信した場合、 メールの本文は空白になりませんでした。 次に何を確認すればよいのか、わからなくなってきたので、 アドバイスをいただけないでしょうか。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • Smartyについて

    Smartyについて Smartyをインストールしました。 OS:ubuntu インストール先:/usr/local/lib/Smarty-2.6.26 php.ini[include_path]の設定:/usr/local/lib/Smarty-2.6.26/libs/を追加 /var/www/以下にtestフォルダ作成 /var/www/test/index.html | /test/index.php chmod 644 | /tempalates chmod 775 templates | / index.tpl chmod 644 /templates_c chmod 775 templates_c /configs chmod 775 configs /cache chmod 775 cache index.phpの内容 <?php require_once(”Smarty.class.php"); $o_smarty=new Smarty(); $o_smarty->template_dir="./templates/"; $o_smarty->compile_dir="./template_c/"; $o_smarty->assign("name","world"); $o_smarty->display("hello.tpl"); ?> index.tplの内容 <html> <head> <title>Hello,world</title> </head> <body> Hello,{$name}! </body> </html> http://web.domain/test/index.php を入力するとエラーは出ませんが、何も表示されません。 これだけで、原因を特定出来ないのかもしれませんが、何処が悪いのでしょうか? 御教示お願いいたします。

専門家に質問してみよう