[Maple-user: 198] Re: テンプレート側で配列を受け取った時の記述

Back to archive index

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.




Maple-user メーリングリストの案内
Back to archive index