Smartyテンプレートを使う上での注意点とは?

このQ&Aのポイント
  • Smartyテンプレートを使う上で、Smartyオブジェクトを二つ作成し、それぞれの変数を同じテンプレートに表示することは可能ですか?
  • PHPのコード例を示しましたが、オブジェクトと表示するテンプレートは1つずつである必要がありますか?
  • オブジェクトの統一についての制約はありますか?
回答を見る
  • ベストアンサー

smaryテンプレートを使う上で、Smartyオブジェクトを二つ作成し

smaryテンプレートを使う上で、Smartyオブジェクトを二つ作成し、それぞれのそのなかの変数をひとつのテンプレートに表示するという方法は可能でしょうか?つまりそれぞれを同じテンプレートに表示する、という方法はできるのでしょうか?PHPは下記のようになります。 $smarty = new Smarty(); $smarty2 = new Smarty(); $smarty->assign('abc', $def); $smarty2->assign('ghi', $jkl); $smarty->display('aaa.tpl'); $smarty2->display('aaa.tpl'); それとも、オブジェクトと表示するテンプレートは1つずつでないといけないとだめで、$smartyと$smarty2は、どっちかひとつに統一する必要があるのでしょうか?

  • PHP
  • 回答数3
  • ありがとう数9

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

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

なんとなくやりたい事は想像できますが。 ヘッダー等の共通で出力したいことがあり、順に出力したいとかですかね。 たとえばこういうことはできます。 $smarty = new Smarty(); $smarty->assign('abc', $def); $smarty->assign('ghi', $jkl); $smarty->display('header.tpl'); $smarty->display('body.tpl'); $smarty->display('footer.tpl'); もし上記のようにするには header.tplには <html><head>~</head><body>+ヘッダ部分 footer.tplには フッタ部分+</body>~<html> のように、HTMLを分割した書き方になるでしょう。 可能か不可能かで言えば上記は可能ですが、SmartyのPHPコードとデザインの分離という重要な機能を損なうものです。 可能ですが、やってはいけない見本です。 例えばヘッダ部分を共通化したいという事であれば Smarty機能の{include}で読み込むようにしましょう。 a.tpl内に {include file="header.tpl"} と書けば、その場所にheader.tplが読み込まれます。 分割させたければさせればよい、分割方法も自由に決められる、読み込みたくなければ読み込まなければ良い、PHPコードに依存しない。 コードとデザインの分離は保たれたままです。

その他の回答 (2)

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

#2の訂正 footer.tplには フッタ部分+</body></html> の間違い。

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

そのコードの意図が全く理解できません。 インスタンスを2つ作って、それぞれにアサインして、それぞれを出力(display)って・・・何をしようとしているんでしょうか? もし実行できたとしても、同じテンプレートで違う値の入ったHTMLが二つ連続で表示されるだけですよ。 例えば、aaa.tplが --- <html> <body> {$def} {$jkl} </body> </html> --- という中身だとしたら ---- <html> <body> abc </body> </html> <html> <body> ghi </body> </html> ---- と出力されてしまします (実際は出力しませんが) HTML構造としては間違ったものが出力されてしますます。 $smarty = new Smarty(); $smarty->assign('abc', $def); $smarty->assign('ghi', $jkl); $smarty->display('aaa.tpl'); こうすればいいだけでは? 出力 --- <html> <body> abc ghi </body> </html> --- と出力されます。

関連するQ&A

  • Smartyに関しまして

    require_once("Smarty/Smarty.class.php"); $smarty = new Smarty(); $smarty->template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; $smarty->assign("message", "こんばんは"); $a = array('hello','php','html'); $smarty->assign('a',$a); $smarty->display("index.tpl"); これでindex.tplで出力すると日本語部分が「?????」になってしまいます。 何か設定がいるんでしょうか??

    • ベストアンサー
    • PHP
  • smartyテンプレート読み込みについて

    Smarty動的Webサイト構築入門という書籍を見ながらSmartyを学習しているのですが、書籍のCD-ROMから落としたサンプルファイルを保存しているのですがどうしてもテンプレートを読み込むことができません。 03_01.php <?php require_once("../smarty/libs/Smarty.class.php"); $smarty = new Smarty(); $smarty->template_dir = "templates"; $smarty->compile_dir = "templates_c"; $smarty->assign("name", "Smartyさん"); $smarty->display("03_01.tpl"); ?> 03_01.tpl Hello, {$name}!! エラーメッセージ Warning: Smarty error: unable to read resource: "03_01.tpl" in C:\xampp\htdocs\smartybook\smarty\libs\Smarty.class.php on line 1092 03_01.phpは、C:\xampp/htdocs/smartybook/ren/に保存しています。 03_01.tplは、C:\xampp/htdocs/smartybook/templates/に保存しています。 どこが駄目なのか教えてください。 宜しくお願いします。

    • 締切済み
    • PHP
  • Smartyについて教えてください。

    Smartyについて教えてください。 参考書によってテンプレートの存在するディレクトリを指定している場合(1)と していない場合(2)がありますが、 どちらが正しいのでしょうか? (1) ********************************************* require_once('smarty/libs/Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = "template02/"; $smarty->compile_dir = "compile/"; $smarty->display("content.tpl"); ********************************************* (2) ********************************************* require_once('smarty/libs/Smarty.class.php'); $smarty = new Smarty(); $smarty->display("content.tpl"); *********************************************

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

    下記のソースを実行すると、テンプレートが読み込めずエラーになってしまいます。 うーん、何故なのか分からず困っております。 phpのバージョンは4.4.6なのですが、Ver5以降でないとサポートされないのでしょうか。 [source] <?php require_once("Smarty.class.php"); class MySmarty extends Smarty { function _MySmarty() { $this->Smarty(); $this->template_dir="../templates"; $this->compile_dir="../templates_c"; } } $o_smarty=new MySmarty(); $o_smarty->display("hello.tpl"); ?> [error message] Warning: Smarty error: unable to read resource: "hello.tpl"

    • ベストアンサー
    • PHP
  • smartyで同じテンプレートを使いまわす

    list.tpl {foreach from=$data key=key item=row loop=test} <tr><td>{$row.name}</td>:<td>{$row.kokugo}</td><td>{$row.sansu}</td></tr> {/foreach} ----- index.tpl(一部) <h2>男の子</h2> {include file=list.tpl} <h2>女の子</h2> {include file=list.tpl} ----- index.php(一部) $Smarty -> assign( "data", $boy ); $Smarty -> assign( "data", $girl ); $Smarty -> display( 'index.tpl' ); (実際にこの書き方は間違っていますが…) index.php から index.tpl を display したいのですが、 この中で使うリストを、使いまわしたいと考えています。 こういうやり方はそもそも可能なのでしょうか? たしかに boylist.tpl 、 girllist.tpl とし中の割当変数を $boy 、 $girl に変えればいいのですが、 将来変更が加わった際に両方変えなければなりません。 今回は例なので男女ですが、もっと多くの要素が出て来た時に 厄介なことになるように思います。 何か解決方法はありませんでしょうか?

    • ベストアンサー
    • 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
  • Pleskサーバ利用時にSmartyのassignが出来ません

    現在、Pleskサーバを利用して、 Apache+Smarty+PHPのWEBプログラミングを行っているのですが、 PHPのユーザ関数内で、Smartyのassign()関数を使用した場合に、Smarty変数の生成を行うことが出来ません。 例としては以下のような感じになります。 ================================================================ <? $smarty->assign( 'a', 'a' ); // テンプレート上で{$a}とするとaと表示される test( $smarty ); $smarty->display('index.tpl'); // index.tplを表示する function test( $smarty ) { $smarty->assign( 'b', 'b' ); // テンプレート上で{$b}としてもbは表示されない } ?> ================================================================ $smartyというのは、$smarty = new Smarty();を行ったものです。 このプログラム自体は、Plesk導入前は動作しておりましたが、 Plesk導入後は上記のように、ユーザ関数外では、通常通りassign()を行うことが出来るのですが、ユーザ関数内だと無効となってしまいます。 また、Pleskのsafe_modeはOffにしております。 Pleskは初めて使用するため、動作上まだ知らないことばかりで、とても初歩的なミスをしているかと思いますが、Pleskに詳しい方がおりましたらどうか教えて頂きたいと思います。

    • ベストアンサー
    • PHP
  • Smartyのテンプレート内で、連想配列をassignする方法はあるのでしょうか?

    Smartyのテンプレート内で、連想配列をassignする方法はあるのでしょうか? もし、なんらかご存知の方いらっしゃいましたら教えて下さい。 #最悪{php}を使うとかでも構いませんので。。 ■現在 .php ---- $ary = array('id' => 1, 'name' => 'buta'); $sm = new Smarty(); $sm->assign('ary', $ary); ---- .tpl ---- ID={ $ary.id }<br> NAME={ $ary.name }<br> ---- ■希望 .tpl ---- { assign var='ary' value=array('id' => 1, 'name' => 'buta') } ⇒ エラー ID={ $ary.id }<br> NAME={ $ary.name }<br> ---- よろしくお願い致します。

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

    phpからassignしテンプレートに表示するには問題ないのですがテンプレートでassignし 表示させたく単純に以下のようにしてみましたがエラーになってしまいます。 <{assign var="aaa"value="名前"}> <{$aaa}> ※デリミタ設定は『<{』と『}>』で指定してます エラー内容は以下の通りです。 Fatal error: Smarty error: [in テンプレートファイル line assignしている行]: syntax error: invalid attribute name: '=' (Smarty_Compiler.class.php, line 1550) in ~中略~\Smarty\Smarty.class.php on line 1093 なんとなくではありますが'='が原因のような事はわかるのですが解決できずにおります。 この場合どうすればいいのでしょうか?

    • ベストアンサー
    • 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 を入力するとエラーは出ませんが、何も表示されません。 これだけで、原因を特定出来ないのかもしれませんが、何処が悪いのでしょうか? 御教示お願いいたします。

専門家に質問してみよう