Top  Dolphy Software  

TOP > セミナー >  HTMLテンプレート > 繰り返し

繰り返し

一覧などテンプレートを繰り返す処理をやってみましょう。
list.php   list.htm
<?php
// テンプレートの読み込み
$html = file_get_contents("list.htm");
// テンプレートの文字コード変換
$to_encoding = mb_internal_encoding();
$html = mb_convert_encoding($html, $to_encoding, "auto");
 
// データ
$datalist = array(
  0 => array("name" => "りんご", "price" => 1230, "remark" => "ふじ 青森県産"),
  1 => array("name" => "みかん", "price" =>  980, "remark" => "有田 和歌山県産"),
  2 => array("name" => "なし",   "price" => 1380, "remark" => "幸水 山口県産")
);
 
// 一覧テンプレートの取得
$block = "<!--ROW-->";
preg_match("/".$block."(.*?)".$block."/s", $html, $matches);
$row_template = ltrim($matches[1], "\r\n");
 
// 一覧の作成(データの繰り返し)
foreach ($datalist as $data) {
  // 1行のテンプレートを初期化
  $row = $row_template;
  // テンプレート文字の置換
  $row = str_replace("{data.name}", htmlspecialchars($data['name']), $row);
  $row = str_replace("{data.price.number}", number_format($data['price']), $row);
  $row = str_replace("{data.remark}", htmlspecialchars($data['remark']), $row);
  // 1行を行全体に追加
  $rows .= $row;
}
 
// 一覧の行全体をテンプレート全体に反映
$html = preg_replace("/".$block."(.*?)".$block."/s", $rows, $html);
 
// テンプレートの出力
print $html;
?>
  <html>
<head>
<title>一覧表示</title>
</head>
<body>
<table border="1">
 <tr>
  <th>品名</th>
  <th>価格</th>
  <th>備考</th>
 </tr>
<!--ROW-->
 <tr>
  <td>{data.name}</td>
  <td align="right">{data.price.number}</td>
  <td>{data.remark}</td>
 </tr>
<!--ROW-->
</table>
</body>
</html>

一覧の作成の様子を見てみましょう
一覧テンプレートの <!--ROW-->で囲まれたブロックを取得します   $row_template
// 一覧テンプレートの取得
$block = "<!--ROW-->";
preg_match("/".$block."(.*?)".$block."/s", $html, $matches);
$row_template = ltrim($matches[1], "\r\n");
   <tr>
  <td>{data.name}</td>
  <td align="right">{data.price.number}</td>
  <td>{data.remark}</td>
 </tr>
     
1行のデータの置換   $row
  // 1行のテンプレートを初期化
  $row = $row_template;
  // テンプレート文字の置換
  $row = str_replace("{data.name}", htmlspecialchars($data['name']), $row);
  $row = str_replace("{data.price.number}", number_format($data['price']), $row);
  $row = str_replace("{data.remark}", htmlspecialchars($data['remark']), $row);
   <tr>
  <td>りんご</td>
  <td align="right">1,230</td>
  <td>ふじ 青森県産</td>
 </tr>
     
2巡目の1行のデータの置換   $rows
  // 1行のテンプレートを初期化
  $row = $row_template;
  // テンプレート文字の置換
  $row = str_replace("{data.name}", htmlspecialchars($data['name']), $row);
  $row = str_replace("{data.price.number}", number_format($data['price']), $row);
  $row = str_replace("{data.remark}", htmlspecialchars($data['remark']), $row);
  // 1行を行全体に追加
  $rows .= $row;
   <tr>
  <td>りんご</td>
  <td align="right">1,230</td>
  <td>ふじ 青森県産</td>
 </tr>
 <tr>
  <td>みかん</td>
  <td align="right">980</td>
  <td>有田 和歌山県産</td>
 </tr>
     
テンプレートの <!--ROW--> で囲まれた部分を組み立てた行全体で置き換えます   $html
// 一覧の行全体をテンプレート全体に反映
$html = preg_replace("/".$block."(.*?)".$block."/s", $rows, $html);
  <html>
<head>
<title>一覧表示</title>
</head>
<body>
<table border="1">
 <tr>
  <th>品名</th>
  <th>価格</th>
  <th>備考</th>
 </tr>
 <tr>
  <td>りんご</td>
  <td align="right">1,230</td>
  <td>ふじ 青森県産</td>
 </tr>
 <tr>
  <td>みかん</td>
  <td align="right">980</td>
  <td>有田 和歌山県産</td>
 </tr>
 <tr>
  <td>なし</td>
  <td align="right">1,380</td>
  <td>幸水 山口県産</td>
 </tr>
</table>
</body>
</html>
     
出力   wwwブラウザ
// テンプレートの出力
print $html;
 
品名 価格 備考
りんご 1,230 ふじ 青森県産
みかん 980 有田 和歌山県産
なし 1,380 幸水 山口県産

 
戻る フォーマット HTMLテンプレート  
 
△画面上