• ベストアンサー

Smartyの[]内に[]を使いたいです。

{$a[$b['id']].cnt} のように、[ ] の中に[ ] を記述すると Smartyの文法エラーになってしまいます。 何か記述方法はあるでしょうか?

  • php4
  • お礼率42% (373/888)
  • PHP
  • 回答数2
  • ありがとう数2

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

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

これじゃだめですか。 {$a[$b.id].cnt}

php4
質問者

お礼

いけました! 一般の方なのにすごいです。 ありがとうございました。

その他の回答 (1)

  • nikuq
  • ベストアンサー率22% (8/36)
回答No.1

PHPで配列などの添字で、DBから抽出したIDをそのまま添字にしたい場合などに、[]内に[]をつかったりしますね。 私は、そういう時には、そのままではエラーになるので、一度変数に格納してから使っています。 {$a[$b['id']].cnt} としたい場合、私は、 $b_edit = "${b['id']}"; {$a[${b_edit}].cut} という様にしています。 ちょっと面倒ですがね。。。(^_^;)

php4
質問者

補足

どうもです。私の質問文が悪かったです。 PHPの書き方ではなく、Smartyテンプレートの 書き方なんです。ちょっと複雑なHTMLで、 添え字を動的にする必要があって。。

関連するQ&A

  • smartyについて

    smartyについて 環境は、windows /php-5 / smarty-2.6.17です。 以下の2つエラーが出てどう対処すればいいか困っています。 【1つめ】 Fatal error: Smarty error: [in **.tpl line 10]: syntax error: unrecognized tag: 文--> 【2つめ】 {$errmsg (Smarty_Compiler.class.php, line 446) in C:\xampp\php\PEAR\Smarty\libs\Smarty.class.php on line 1095 【ソース】 呼び先PGは、 $this->smarty->assign("errmsg","ニックネーム"); $this->smarty->display("**.tpl"); テンプレートでは、 <tr id="" class=""> <td id="" class=""><font color="#ff0000">{$errmsg}を入力してください。</font></td> </tr> よろしくお願いいたします。

    • 締切済み
    • PHP
  • 【smarty】予約変数に可変変数

    POST送信されたデータが複数あります。 <{$smarty.post.address1}> <{$smarty.post.address2}> <{$smarty.post.address3}> というように書けば取得できるのですが、項目数が可変な為 ループで処理できないものかと思います。 そこで下記のように試しましたがエラーになります。 assignのvalueの記述が間違ってるような気もしますが、わかりません。 そもそも、予約変数はこのような使い方はできないのでしょうか? <{section name=cnt loop=$kosu}> <{assign var="str" value='$smarty.post.address'|cat:$smarty.section.cnt.iteration}> <{$str}>←$smarty.post.address1のデータを出力してほしい <{/section}>

    • ベストアンサー
    • PHP
  • Smartyで { や } を使いたい

    Smartyのテンプレート内でJavaScriptを直接記述したいのですが、 { や } を使うとエラーが発生します。 おそらくコンパイルエラーだとは思いますが、テンプレート内で { や } を使う事って出来るのでしょうか? お願いします。

    • ベストアンサー
    • PHP
  • smartyの必要性について

    phpを用いて携帯サイトを作成しています。 phpのみを表記している「a.php」「b.php」「c.php」「d.php」「e.php」があります。 ------------a.php------------- <?php if(~~){ $a[0] = '~~'; }else(~~~~){ $a[0] = '~~~'; } $a[1] = '~~'; $a[2] = '~~~'; ・ ・ ・ $a[n-10] = <<< MESSAGE <h1>{$a[n-25}</h1> <p>テスト表示</p>     ・     ・ <p>{$a[n-15]}</p> MESSAGE; ・ ・ $a[n] = <<< MESSAGE <h1>{$a[n-50}</h1> <p>テスト表示</p>     ・     ・ <p>{$a[n-45]}</p> MESSAGE; ?> ----------------------------------- ------------b.php------------------ <?php if(~~){ $b[0] = '~~'; }else(~~~~){ $b[0] = '~~~'; } $b[1] = '~~'; $b[2] = '~~~'; ・ ・ ・ $b[n] = <<< MESSAGE <h1>{$b[0}</h1> <p>テスト表示</p>     ・     ・ <p>{$b[n-10]}</p> MESSAGE; ?> --------------------------------------- c.php以下の内容もだいたいおなじ内容になっております。 -----------index.php-------------------- <html> <head> <?php include_once 'a.php'; include_once 'b.php'; include_once 'c.php'; include_once 'd.php'; include_once 'e.php'; ?> </head> <body> <?php echo $a[0]; echo $a[n]; echo $b[n-60]; echo $c[n-30]; ?> </body> </html> ----------------------------------------- -----------index1.php------------------- <html> <head> <?php include_once 'a.php'; include_once 'b.php'; include_once 'c.php'; include_once 'd.php'; include_once 'e.php'; ?> </head> <body> <?php echo $a[0]; echo $a[n]; echo $b[n-80]; echo $c[n-3]; ?> </body> </html> ------------------------------------- このような感じでindex.php ~ index[n].phpを作成しております。 index.php ~ index[n].phpは、基本として修正は行なわず a.php ~ e.phpを修正することによって、すべてのページへ 瞬時に反映できるようにして作成しております。 現在、この方法で十分管理はできています。 つぎは、smartyを用いておなじような処理を考えてみました。 ######################## ### smarty使用 #### ######################## ------------index.php開始---------------- <?php require_once 'libs/Smarty.class.php'; $smarty = new Smarty; $smarty->compile_check = true; include_once 'a.php'; include_once 'b.php'; include_once 'c.php'; include_once 'd.php'; include_once 'e.php'; $smarty->assign("a", $a); $smarty->assign("b",$b); $smarty->assign("c",$c); $smarty->display('test.tpl'); ?> ------------------------------------------ ------------index.tpl--------------------- <html> <head> </head> <body> {$a[0]} {$a[n]} {$b[n-60]} {$c[n-30]} </body> </html> --------------------------------------- smartyを使っていないときよりも、smartyを使ったほうが 処理速度が速くなるようでしたらsmartyに乗り換えるのですが Smarty.class.phpを余分に読み込む分、処理速度が速くなって いるとも思えません。 また、index.html ~ index[n].htmlへの記述も大差ないので 可視性やデザイン面でもとくに違和感なく修正できます。 上記の作成方法で、smartyを用いるうえでの可視性の向上以外の利点は ありますでしょうか? また、改善点などございましたら、ご教授いただけると幸いです。

    • 締切済み
    • PHP
  • smartyのforeachの使い方

    仮に$strが以下のような配列を持っている場合smartyのtpl側で 出力させたいのですがうまくいきません。 Array ( [0] => Array ( [id] => 1 [name] => 名前 [sub_id] => Array ( [0] => 12 [1] => 13 ) [sub_name] => Array ( [0] => あああ [1] => いいい ) [sub_cnt] => Array ( [0] => 5 [1] => 5 ) ) [1] => Array ( [id] => 1 [name] => 名前 ) ) sub_***は配列が存在するものとしないものがあります。 そしてtpl側は {foreach item=items from=$str} <ul id="side{$items.id}"> {foreach item=item from=$items} <li><a href="index.php?id={$item.sub_id}">{$item.sub_name} ({$item.sub_cnt})</a></li> {/foreach} </ul> {/foreach} とforeachを重ねてみたのですがsub_***の値が表示されない 状態です。 複雑な配列なのですがこの場合どうすればうまく表示させれるの でしょうか?

    • ベストアンサー
    • PHP
  • smartyで計算を行う方法

    smartyで複雑な計算を行う場合はどうすればよいのでしょうか? 簡単な計算は、 <{$a/$b}> のように記述出来ますが、カッコを使った方法などはどうすれば良いのでしょうか? 色々と試したり検索しているのですが出来ません。 外部のPHPファイルに各変数の値を渡して計算して元のページに計算結果を戻す、がベストな方法でしょうか? 例えば、$a/($b-$c)という式があったとします。 これをsmartyで計算してその結果を表示する場合、 <{assign var="d" value=$b-$c}> <{$a/$d}> って少しまわりくどい方法なら出来ますが、もっと複雑な式などになる場合、こんな感じで順を追って一つづつ値をアサインして最終的に答えを導き出すのが普通なのでしょうか? もっと簡単にカッコなどを使うことって出来ますか? また、外部にPHPファイルを用意して、そこで計算をして結果を戻してくるって方法も取れるのでしょうか? PHPで計算する方法があるなら、是非教えていただけませんか? フォームなどから外部のPHPに値を渡すなら、 $a = &_POST[$a] って書くのは知っているのですが、smartyの値を渡したり戻したり、って方法が分かりません。 宜しくお願いします。

    • ベストアンサー
    • 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
  • Smartyでのエラー

    Smartyを使用してみようと思い、displayを使用すると $smarty->display("ファイル名.tpl"); 「Fatal error: Call to a member function display() on a non-object」 と出てしまいます。このエラーはどういう意味なのでしょうか…。

    • ベストアンサー
    • PHP
  • Smarty の演算方法

    Smartyで、配列の数×2+3という計算をさせたいのですが・・ ■配列の数だけを出力はOKでしたが、 rowspan="{$a[$id]|@count}"> ■配列の数x2+3という演算はできませんでした・・ rowspan="{$a[$id]|@count|*2+3}"> 一度に演算するのは無理でしょうか? Smartyに変数をセットする方法、 又は日本語マニュアルのありかでもOKです。 よろしくお願いします。

    • ベストアンサー
    • 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

専門家に質問してみよう