[PHP-users 23141]Re: foreachを使ってデータを一つのテーブルで表示させる方法

UNO Shintaro uno @ venus.dti.ne.jp
2004年 8月 31日 (火) 01:18:42 JST


>で一応データは表示できるのですが、一つのテーブルで
>表示されるのではなく、「検索結果」+検索結果テーブル
>という風にAのテーブルとBのテーブルのセットで繰り返し
>表示されてしまいます。

この書き方だと、当然そうなります。テンプレートを何度も読むのではなくて、
縦方向の繰り返し構造をテンプレートの中で定義してください。

たとえば、元のテンプレートとなるべく近い書き方なら
{foreach item=t_data from=$t_array}
<tr>
{foreach key=key item=item from=$t_data}
<td>{$item}</td>
{/foreach}
</tr>
{/foreach}
こんな感じですが、これは横方向の表示順やカラム数がストアドプロシージャ
の戻す表の構造をそのまま反映します。「表示順を変えたいときには、ストア
ドプロシージャを修正する必要がある」という気持ち悪いしろものになるので、
横方向はforeachで繰り返すよりも、
{foreach item=t_data from=$t_array}
<tr>
<td>$t_data.syoribi</td>
<td>$t_data.kaiukeninmei</td>
<td>$t_data.uriagekingaku</td>
<td>$t_data.uriagekilosuu</td>
</tr>
{/foreach}
こんな感じで連想名を指定する方がいいと思います。
(各カラムに付く連想名の情報が示されていないので、
このコード例では、てきとーな名前で書いてますが。)


で、プログラム側では全件データを丸ごと変数に格納してSmartyに渡します。
多分$this->db_objectはPEAR::DBのコネクションでしょうから、
function get_kekka(){
  $sql="EXECUTE sampletest_store;";
  $db_result=$this->db_object->getAll($sql,array(),DB_FETCHMODE_ASSOC);
  if(DB::isError($db_result)){
    print $db_result->getDebugInfo();
    exit;
  }
  $this->smarty_obj->assign("t_array",$db_result);
  $this->smarty_obj->display("search_kekka.tpl");
  $this->db_object->disconnect();
}
こんな感じ。

-- 
UNO Shintaro, 宇野 信太郎
mailto:uno @ venus.dti.ne.jp
http://www.venus.dti.ne.jp/~uno/


PHP-users メーリングリストの案内