※ ChatGPTを利用し、要約された質問です(原文:Smartyを用いたコードの書き方について質問です
)
Smartyを用いたコードの書き方についての質問
このQ&Aのポイント
Smartyを使ったコードの書き方について質問です。MySQLから取得したデータをシンプルに表示する方法を教えてください。
質問者はSmartyの初心者であり、地域ごとのデータを表示する際に問題が生じています。地域ごとに区切りを入れながらデータを表示する方法を教えてください。
質問者が現在試行中のコードを示し、地域と都道府県のデータを取得して表示していることがわかります。
Smartyを用いたコードの書き方について質問です
Smartyを用いたコードの書き方について質問です
お世話になります。
MySQLから得たデータをできるだけシンプルなコードで以下のように表示したいのですが、
smarty(PHPも)初心者なので苦戦しています。
完成イメージはこんな感じです。
「~件」は登録されているデータ数です。
-------------------
■北海道、東北(全1件)
北海道(0件) 青森(0件) 岩手(0件) 宮城(0件) 秋田(1件) 山形(0件) 福島(0件)
■関東(全8件)
茨城(1件) 栃木(0件) 群馬(1件) 埼玉(1件) 千葉(1件) 東京(5件) 神奈川(0件)
■中部(全5件)
新潟(0件) 富山(0件) 石川(0件) 福井(0件) 山梨(0件) 長野(1件) 岐阜(0件) 静岡(0件) 愛知(4件)
---以下省略---
-------------------
都道府県だけなら{foreach}で問題なく表示できるのですが、
その途中に「■北海道、東北」や「■関東」など地域を挟み込もうとしているため、
普通にループさせることができません。
こういった場合、どのようにすればシンプルにできるのでしょうか。
ご教授いただけたら幸いです。
現在ここでストップしています。とりあえず参考までに。。。
---area.php---
---前省略---
$rst = $DB->execute("SELECT * FROM prefec");
//都道府県を取得(47都道府県の番号、名前、登録データ数)
while($row=$rst->FetchRow()){
$prefec[] = array(
"prefecid"=>$row['prefecid'],
"prefecname"=>$row['prefecname'],
"prefeccnt"=>$row['cnt'],
);
}
//地域を取得(7地域の番号、名前、登録データ数)
$rst = $DB->execute("SELECT * FROM tblarea");
while($row=$rst->FetchRow()){
$area[] = array(
"areaid"=>$row['areaid'],
"areaname"=>$row['areaname'],
"areacnt"=>$row['cnt'],
);
}
$smarty->assign("area", $area);
$smarty->assign("prefec", $prefec);
$smarty->display("area.tpl");
------
---area.tpl---
-中略-
//地域を表示
{{foreach from=$area item="area"}}
<a href=hoge.php?areaid={{$area.areaid}}">{{$area.areaname}}</a>
(全{{$area.areacnt}}件)</div>
{{/foreach}}
//都道府県を表示
{{foreach from=$prefec item="prefec"}}
<a href="hoge.php?prefecid={{$prefec.prefecid}}">{{$prefec.prefecname}}</a>
({{$prefec.prefeccnt}}件)</div>
{{/foreach}}
------
とうぞよろしくお願いいたします。
お礼
ご回答いただいた内容をもとに、都道府県に地域データを持たせて試行錯誤した結果、以下のコードにたどり着きました。 ---area.tpl--- //地域をループ {{section name=area loop=$area}} <a href='search.php?areaid={{$area[area].areaid}}'>{{$area[area].areaname}}</a> (全{{$area[area].areacnt}}件)</div> //地域の中で都道府県をループ {{section name=prefec loop=$prefec}} {{if $area[area].areaid == $prefec[prefec].areaid}} <a href='search.php?prefecid={{$prefec[prefec].prefecid}}'>{{$prefec[prefec].prefecname}}</a> ({{$prefec[prefec].prefeccnt}}件)</div> {{/if}} {{/section}} {{/section}} -------- 初心者なのでこの書き方でいいのかどうかはよくわかりませんが、一応イメージ通りの形にはなりました。 ベタ書きのほうも試したのですが、あまりに冗長になってしまうため上記のほうが個人的にはしっくりきます。 ともあれ、ご回答ありがとうございました。