Smarty講座第3回 foreach

2011年4月6日 by Yuya Mishima

今回ご紹介する関数はこちら!

【foreach】

{foreach}{/foreach} この二つはセットで使用します。
どんなときに使うかと言いますと。
指定した配列要素を1つ1つ取り出す時などに使用します。(さらっ

{foreach}関数では必須属性が定められています。
必須の属性は fromitem です。
「from」属性には処理対象の配列が格納されている変数名を、「item」属性には配列要素を格納している変数名を記述します。

必須ではないですが「key」属性にはキーを格納する変数名を記述します。

基本的な書式
{foreach from=配列変数 item=要素を格納する変数} 
    処理 {/foreach}
Key属性を取得する場合
{foreach from=配列変数 item=要素を格納する変数 key=キーを格納する変数} 
    処理 {/foreach}
前回説明を省いた「assign」メソッドについて少し。
テンプレート変数名/値のペアを明示的に指定するか、それらが格納された連想配列を指定します。
Smartyオブジェクト->assign(変数名,値);
のように使います。

ではサンプルを一つ
sample.php

<a href="templates/index.tpl">index</a><?php
// Smartyインクルード
require_once('Smarty.class.php');
// Smarty生成
$smarty = new Smarty();
// ディレクトリ指定
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates_c/';

//タイトル
$smarty->assign('title', 'foreachのサンプル');
//連想配列
$data = array(
             "no1"=>"名前1",
             "no2"=>"名前2",
             "no3"=>"名前3",
             "no4"=>"名前4",
             "no5"=>"名前5",
             "no6"=>"名前6",
             "no7"=>"名前7"
             );
$smarty->assign('date_no', $data);

// ディスプレイ表示
$smarty->display('index.tpl');
?>
index.tpl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>smartyサンプル01</title>
</head>
<body>
<h1>{$title}</h1>
<p>---------foreachを使わない出力---------</p>
<p>表示例1:{$date_no.no1}</p>
<p>表示例1:{$date_no.no2}</p>
<p>表示例1:{$date_no.no3}</p>
<p>表示例1:{$date_no.no4}</p>
<p>表示例1:{$date_no.no5}</p>
<p>表示例1:{$date_no.no6}</p>
<p>表示例1:{$date_no.no7}</p>

<p>---------foreachを使う出力---------</p>
{foreach from=$date_no key=hoge item=var}
//Key及びItemを表示
<p>表示例2:{$hoge}:{$var}</p>
{/foreach}
</body>
</html>
出力結果

foreachのサンプル

---------foreachを使わない出力---------

表示例1:名前1

表示例1:名前2

表示例1:名前3

表示例1:名前4

表示例1:名前5

表示例1:名前6

表示例1:名前7

---------foreachを使う出力---------

表示例2:no1:名前1

表示例2:no2:名前2

表示例2:no3:名前3

表示例2:no4:名前4

表示例2:no5:名前5

表示例2:no6:名前6

表示例2:no7:名前7


のようになります。

smartyには同じ繰り返し処理で{section}があります。
こちらはPHPでforループを行うように処理をさせることが出来ます。
今回説明した{foreach}よりも便利で汎用性が高いと思いますので次回は{section}について解説したいと思いますので、お楽しみに!
  • Index
  • Back
  • Index
  • Back

スタッフ

  • 平竹仁士
  • 河西裕一
  • 柳澤健一
  • 小林秀太郎
  • 丸山幸男