[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 メーリングリストの案内