がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

CONVの使い方:複置換変:ループ

ループ系複置換の基本は
「"ハッシュ配列"の配列」を作って渡すこと。
で、data_clumpと組み合わせた方法。…ちなみに「SQL文使ってpkのlistを作る」のは、おいちゃん的には結構いや(笑
なにがしか今度作りたいなぁ。
ページ処理したい時は、page_controll_limit クラスと適宜併用してちょ。


まずはテンプレート書式。適当に、掲示板的なものを想定(一行横に並ぶ掲示板ってのもどうかとは思うけど)。
デザインがなってないとかいう突っ込みは禁止(笑

<TABLE border="1">
<tr>
  <td>タイトル
  <td>名前
  <td>投稿日時
  <td>email
  <td>本文
$$$bbs_loop$$$
<tr>
  <td>%%%title%%%
  <td>%%%name%%%
  <td>%%%insert_date%%%
  <td>%%%email%%%
  <td>%%%body%%%
$$$/bbs_loop$$$
</table>


んで、プログラム側。ぢつは結構シンプル。PKは1つであると仮定〜。
ID配列の作成とぶん回しは一緒にしてもいいんだけど、説明のしやすさを基準に分離してまふ。

// PKなID配列の取得
$sql = SQL文; // "SELECT bbs_id FROM bbs WHERE 適当な条件;" とかね。
$ids = array();
$res = DBハンドルインスタンス->query($sql);
wihle($res->fetch()) {
  $ids[] = $res->get_data(0);
}

// データを設定する
$data = array();
$obj = new bbs_clump();
foreach($ids as $id)
{
  // データをゲト
  $obj->init();
  $obj->set_db(DBハンドルインスタンス);
  $obj->set_value('bbs_id', $id, false);
  // 直前でIDげとってるんでエラー処理は省いてまふ。チェックするなら、booleanでfalseが返ってきたらNG処理ってことで
  $obj->get();

  // ハッシュ配列に情報をげと
  $wk = $obj->get_all_data_to_hash();

  // XXX 情報を追加するなら、ここで$wkに対してkeyとvalueを適宜設定

  // データを設定
  $data[] = $wk;
}

// CONVに設定
// XXX 知っている人に。simple_loop、インスタンス生成でいきなりset_data出来るように改造した〜
CONVインスタンス->multiDic('bbs_loop', new simple_loop($data));

こんなげ。