TAKAHASHI Kunihiko
takah****@knosp*****
2006年 3月 3日 (金) 21:37:54 JST
高橋(kunit)です。 #反応がおそくなってすみません。 お使いになられてるのは、3.1.0でしょうか? もしそうならば、3.1.0からdefaultで各変数にescapeをかける処理を 入れた都合で以下のように foreach を記述していただかないと いけないです。 {action->getBrandlist assign=Brandlist} {foreach item=rowset from=$Brandlist|smarty:nodefaults} <option value={$rowset[0]}>{$rowset[1]} {/foreach} おそらくphp.iniで「display_errors = On」としていただくと以下の Warningがでると思います。 Warning: htmlspecialchars() expects parameter 1 to be string, array given in /path/to/maple/smarty/plugins/modifier.escape.php on line XX 開発時には以下のようにしておくとなにがおきてるかわかっていいですよ。 ・php.ini「display_errors = On」 ⇒ 本番運用時にはユーザにディレクトリ構成等の内部情報を さらすことになるので「display_errors = Off」に ・入り口PHPで「error_reporting(E_ALL);」 ⇒ こちらも本番運用時には「error_reporting(0);」 また、xdebugを入れておくと、エラーが発生するとスタックトレースを 表示してくれますので、おすすめです。 Smartyが不必要なところまでescapeしてくれるというのが問題では あるんですが、デフォルトescapeで、必要ないところを明示的に 「|smarty:nodefaults」と記述するということによってescape漏れを 防ぎ、XSS対策にもなるかなと思っています。 なので、foreachやsection等で配列をタグの属性に使用する場合は 「|smarty:nodefaults」をかくということでお願いします。 #その他、オブジェクトを引数とするといったようなときも #同様な注意が必要です On Fri, 03 Mar 2006 19:29:12 +0900 hideki ooyama <hidek****@jun*****> wrote: > 市橋様、畠田様、ありがとうございます。 > > 配列を一度assignしてあげた結果、ドロップダウンリストが > 正しい行数で表示されるようになりました。 > ただし行数は合っているものの、内容が全く表示されない > 状態で、苦戦中です。おそらくsmarty側の記述が不適切 > だと思うのですが... > これが解決したら、{html_options}も試してみたいと > 思っています。 > > テンプレート側は > {action->getBrandlist assign=Brandlist} > {foreach item=rowset from=$Brandlist} > <option value={$rowset[0]}>{$rowset[1]} > {/foreach} > > という状態になっています。 > > モジュール側では > function getBrandlist() { > 〜中略(PEAR DBを使用したクエリ)〜 > while ($rb->fetchInto($rw)) { > $brandarray[] = array($rw[0], $rw[1]); > } > return $brandarray; > } > > $brandarray[]に値が入っていることを確認するために > 関数のreturnを$brandarray[0][0]にして、それを > テンプレート側で表示させると、値は入っています。 > > 連続の質問で恐縮ですが、よろしくお願いいたします。 > _______________________________________________ > Maple-user mailing list > Maple****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/maple-user --- TAKAHASHI Kunihiko KNOSPEAR Inc.