SmartyのSectionの良い例ってないでしょうか?

このQ&Aのポイント
  • SmartyのSectionの良い例について質問です。
  • Smartyのマニュアルでは、テンプレート側の例しかなく、PHP側でどうすれば良いのかがわかりません。
  • 特に、DBから連想配列を取得し、それをテンプレートで表示する例が欲しいです。
回答を見る
  • ベストアンサー

SmartyのSectionの良い例ってないでしょうか?

Smartyのマニュアルでは、テンプレート側の例しかなく、PHP側でどうすれば良いのかがわかりません。 一番良く使うと思われるDBから連想配列を取得し、 それをテンプレートで表示する例がインターネット上のどこにも書かれていないので(T_T) <? //Smartyってスマートでないかも・・ $ar[0][testCd] = "1"; $ar[0][testName] = "田中"; $ar[1][testCd] = "2"; $ar[1][testName] = "鈴木"; ?> 上記配列をSmartyのSectionタグを用いて、 以下のように表示するには、PHP、テンプレートで 夫々どう書けば良いのでしょうか? ■No1 田中 ■No2 鈴木

  • PHP
  • 回答数1
  • ありがとう数4

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

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

Smartyのdemoディレクトリにある index.phpが「PHP側でどうすれば」の 例かと。

natsuyori
質問者

お礼

会社では、Demoファイルがサーバに置かれてなかったため気づきませんでした。Demoにあったので、ネットで情報がなかったのですね・・ありがとうございます(^^)

関連するQ&A

  • Smartyのテンプレートからjavascriptに配列を渡す

    お世話になります。 PHP+Smartyで開発しております。 質問なのですが、 PHPからSmartyに連想配列をアサインします。 そして、そのテンプレートよりjavascriptへ配列を渡すことは 可能でしょうか? もし可能でしたら、ご教授願えないでしょうか。 よろしくお願いいたします。

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

    PHPとSmartyでカレンダーを製作しております。 カレンダーを以下の配列に格納し、テンプレートで表示しています。 $cal = Array([0] => Array([0] => [1] => [2] => [3] => 1 [4] => 2 [5] => 3 [6] => 4) [1] => Array([0] => 5 [1] => 6 [2] => 7 [3] => 8 [4] => 9 [5] => 10 [6] => 11) [2] => Array([0] => 12 [1] => 13 [2] => 14 [3] => 15 [4] => 16 [5] => 17 [6] => 18) [3] => Array([0] => 19 [1] => 20 [2] => 21 [3] => 22 [4] => 23 [5] => 24 [6] => 25) [4] => Array([0] => 26 [1] => 27 [2] => 28 [3] => 29 [4] => 30 [5] => 31 [6] => )) テンプレートは以下です。(一部のみ) {section name=index loop=$cal} <tr> <td> {$cal[index].0} </td> </tr> (以下省略) {section} これで、カレンダーは表示できていますが、これに付加して、 10日、15日、20日、30日の<td>のバックカラーを変えたいのです。 そこで、以下の配列をテンプレートに渡し、実現したいのですが 上記のテンプレートにどう組み込めばいいのかをご教授下さい。 $day = Array([0] => Array([0] => 10 ) [1] => Array([0] => 15 ) [2] => Array([0] => 20 ) [3] => Array([0] => 30 ))

    • ベストアンサー
    • PHP
  • smartyのsection内でloop番号を手動で進められますか?

    $rs[0][data1] = 1; $rs[1][data1] = 2; $rs[2][data1] = 3; というように行単位で配列$rsに入っているとし、 1 2 3 というようにSmartyを使用して表示したいのですが、 Smartyでは実現不可能でしょうか? section内で、PHPでいうi++;のように インデックス番号を次に進められれば 可能だとは思うのですが・・ 以下で、挫折しました。 {section name=a start=0 loop=$rs step=2} {$rs[a].data1} {$rs[a].data1}<br> {/section}

    • 締切済み
    • PHP
  • 【Smarty】連想配列のキーの文字列、変数の結合について

    Smartyで連想配列のキーにある文字列、変数の結合の方法が分からないので質問させていただきます。 通常のphpで $data['name'.$cnt] といった書き方をSmartyのテンプレート側で書く場合はどのようにすれば良いのでしょうか? 「|cat:」や「`(バッククォート)」等、一通り試しましたがうまく表示されません。 宜しくお願い致します。

    • 締切済み
    • PHP
  • Smarty コンバートエラー??

    はじめまして。 PHP初心者です。 テンプレートにオブジェクト配列を渡して、表示させたいのですが、 テンプレートをコンパイルする際にエラーがでてしまいます。 呼び出し元のtest.phpに”echo $objArray[0] -> get_id();”と書くと正常に表示されるのでテンプレートと問題と思うのですが、原因が解らずこまっております。。。 ご指導お願い致します。 ■環境 OS:Fedora 4 php-5.2.0 Smarty-2.6.13 ■ブラウザに表示されるエラー Catchable fatal error: Object of class User could not be converted to string in /home/dev/board/templates_c/%%6D^6D7^6D7C5625%%test.tpl.php on line 3 ■テンプレート(test.tpl) {$users[0] -> get_id()} ■テンプレートの呼び出し元(test.php) require_once("DB.php"); require_once("Smarty/libs/Smarty.class.php"); $o_smarty = new Smarty(); $o_smarty -> template_dir = "../templates"; $o_smarty -> compile_dir = "../templates_c"; $o_smarty -> debugging = TRUE; $db = DB::connect("mysql://*********************"); $objArray = User::getUserInfos($db); echo $objArray[0] -> get_id(); $o_smarty -> assign("users",$objArray); $o_smarty -> display("test.tpl"); class User { private $_id; public function get_id(){return $this -> _id;} public function set_id($_id){$this -> _id = $_id;} public static function getUserInfos($db){ ・・(中略)・・ } return $aryUsr; } }

    • ベストアンサー
    • PHP
  • smartyのforeachの使い方がよくわかりません。

    Smartyを使ってサイトを作っていて連想配列でネストしている配列を{section}でループさせています。 はじめの配列はうまく取り出せてループできるのですが、ネストした配列の中身を取得して表示させることができません。{section}内でさらに配列の要素をループさせたい場合どのようにしたらよいのでしょうか? print_rの結果はこんな感じです。[test] => Arrayの配列を取り出したいのですがどのようにしたらよいでしょうか? Array ( [0] => Array ( [id] => 7 [postdate] => 2008/02/21/ 06:48:10 [count] => 0 [test] => Array ( [0] => Array ( [id] => 4 [title] => あああああああああ) [1] => Array ( [topicid] => 6 [postdate] => 2008/02/19/ 13:44:41

    • 締切済み
    • PHP
  • Smarty3のリソース・プラグイン

    Smarty3のリソース・プラグインについて Smarty3(3.0.9)でリソース・プラグインを行うと以下エラーが出力され、データベース内のテンプレートを呼び出すことができません。 Uncaught exception 'SmartyException' with message 'Unable to load template db 'test.tpl'' in /usr/local/lib/php/smarty/sysplugins/smarty_internal_template.php:165 Stack trace: #0 /usr/local/lib/php/smarty/sysplugins/smarty_internal_template.php(554): Smarty_Internal_Template->isExisting(true) #1 /usr/local/lib/php/smarty/Smarty.class.php(340): Smarty_Internal_Template->getRenderedTemplate() #2 /usr/local/lib/php/smarty/Smarty.class.php(384): Smarty->fetch('test.tpl', NULL, NULL, NULL, true) #3 /usr/local/apache2/htdocs/test.php(18): Smarty->display('test.tpl') #4 {main} thrown in /usr/local/lib/php/smarty/sysplugins/smarty_internal_template.php on line 165 同様のプログラムでSmarty2*で実行するとうまく表示します。 Smarty3のマニュアル(英語版)を見てもうまくいきません。。 ご存知の方、ぜひ教えてください。 (環境) OS:Debian 6.0.1 WebServer:Apache2.2.19 PHP:PHP5.3.6 MySQL:MySQL5.0.87 (プラグイン) <?php require('DB.php'); define("DB_FILE","mysqli://*****:*****@localhost/*****"); function smarty_resource_db_source ($name, &$source, $o_smarty) { $db = DB::connect(DB_FILE); $stt = $db->prepare("SELECT source FROM templates WHERE name =?"); $rs = $db->execute($stt,array($name)); if(is_null($row=$rs->fetchRow(DB_FETCHMODE_ASSOC))){ return FALSE; }else{ $source=$row["source"]; return TRUE; } } function smarty_resource_db_timestamp($name, &$modified, $o_smarty) { $db = DB::connect(DB_FILE); $stt = $db->prepare("SELECT * FROM templates WHERE name =?"); $rs = $db->execute($stt,array($name)); if(is_null($row=$rs->fetchRow(DB_FETCHMODE_ASSOC))){ return FALSE; }else{ $modified=$row["modified"]; return TRUE; } } function smarty_resource_db_secure($name, $o_smarty) { // 全てのテンプレートがセキュアであると仮定します return true; } function smarty_resource_db_trusted($name, $o_smarty) { // テンプレートから使用しません } ?> (呼び出しファイル) <?php set_include_path('/usr/local/lib/php/smarty/:' . get_include_path()); @include('Smarty.class.php'); $o_smarty = new Smarty(); // Smartyのテンプレートのキャッシュファイル格納先を指定 $o_smarty->compile_dir = "/usr/local/apache2/htdocs/template_c"; $o_smarty->plugins_dir[]="/usr/local/apache2/htdocs/plugin"; $o_smarty->default_resource_type="db"; // phpスクリプトからテンプレートリソースを使用します $o_smarty->display("test.tpl"); ?> (データベース) CREATE TABLE templates ( name VARCHAR(100) NOT NULL default '', modified TIMESTAMP, source TEXT, PRIMARY KEY (name) ) DEFAULT CHARACTER SET utf8; -- Dumping data for table 'templates' INSERT INTO templates VALUES('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');

    • 締切済み
    • 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について

    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 foreach 半角スペース

    いつもお世話になっています。 phpより連想配列をsmartyにassignし、 smarty側でforeachで出力しているのですが、 要素間に無駄なスペースが混入します。 回避方法はあるのか教えて頂けないでしょうか。 [php] $arr = array('a' => 1, 'b' => 2); [smarty] {foreach from=$arr item=item} {item}: {/foreach} [出力] 1 : 2 ※本来1:2と出力させたい 宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう