研修(Smartyのロジックとテンプレートの作成)
Smartyを用いて、入力フォーム、管理画面のロジックとテンプレートを作成する。
■ロジック作成
phpの処理をロジックで行う。
Smartyによって変更になった部分だけ抜粋。
// エラー文
$smarty->assign("error", $error);
$smarty->assign("error_array", $error_array);
・
・
・
// テンプレート指定
if($view == "finish"){
$smarty->display('finish.tpl');
}else if($view == "confirm"){
$smarty->display('confirm.tpl');
}else{
$smarty->display('form.tpl');
}
assign("テンプレート変数名", 値)でテンプレート変数に値をセットする。
値は配列、文字列も可能。
display('テンプレートファイル')でテンプレートを表示する。
上記は$viewの状態によって表示するテンプレートを分けている。
■テンプレート作成
表示する部分(htmlなど)をテンプレートで作成。
・変数表示
<font color="#FF0000"><b>{$error}</b></font><br />
<div><input type="text" name="lastname" value="{$lastname|escape}"></div>
{$value.userid|escape}
{変数} でロジックでセットした変数を使える。
変数の後ろに | 拡張子 を付けることで追加処理が可能。
escapeは変数に対してエスケープ処理を行う。
配列の場合は {$変数.キー} で要素を指定する。
・if文
{if !count($error_array)}
<div align='center'>全{$num}件</div>
{/if}
{if $userid eq 1}
{$lastname|escape}
{/if}
ifの中ではphp関数を使うことができる。
http://www.smarty.net/manual/ja/language.function.if.php
・foreach文
・PHP側
<?php
$arr = array(1000, 1001, 1002);
$smarty->assign('myArray', $arr);
?>
・テンプレート側
{foreach from=$myArray item=foo}
<li>{$foo}</li>
{/foreach}
必須の属性はfromとitem。
from:ループに使用する配列
item:要素を示す変数名
key:キーを示す変数名
・PHP側
<?php
// 性別の配列
$sex_array = array("man"=>"男", "woman"=>"女");
$smarty->assign("sex_array", $sex_array);
// 入力データ(POSTに性別配列のキーが格納)
$smarty->assign("post_data", $_POST);
?>
・テンプレート側
{html_radios name="sex" options=$sex_array selected=$post_data.sex}
・出力
<label><input type="radio" name="sex" value="man" />男</label>
<label><input type="radio" name="sex" value="woman" />女</label>
name:ラジオボタンの名前
options:value→配列のキー output→配列の要素 となる連想配列
selected:選択済みにするラジオボタン要素
→例は入力画面から受け取ったキーを指定している
・プルダウンメニュー
・PHP側
<?php
// 全都道府県の配列
$smarty->assign("pref_array", $sex_array);
// 入力データ(POSTに都道府県配列のidが格納)
$smarty->assign("post_data", $_POST);
?>
・テンプレート側
{html_options name=prefid options=$pref_array selected=$post_data.prefid}
・出力
<select name="prefid">
<option label="--" value="0">--</option>
<option label="北海道" value="1">北海道</option>
<option label="青森県" value="2">青森県</option>
・
・
・
<option label="宮崎県" value="45">宮崎県</option>
<option label="鹿児島県" value="46">鹿児島県</option>
<option label="沖縄県" value="47">沖縄県</option>
</select>
name:プルダウンの名前
options:value→配列のキー output→配列の要素 となる連想配列
selected:選択済みにするプルダウン要素
→例は入力画面から受け取ったidを指定している
・PHP側
<?php
// 趣味の配列
$hobby_array = array("music"=>"音楽", "movie"=>"映画", "etc"=>"その他");
$smarty->assign("pref_array", $sex_array);
// 入力データ(POSTに趣味配列のキーが格納)
$smarty->assign("post_data", $_POST);
?>
・テンプレート側
{html_checkboxes name="hobby" options=$hobby_array selected=$post_data.hobby}
・出力
<label><input type="checkbox" name="hobby[]" value="music" />音楽</label>
<label><input type="checkbox" name="hobby[]" value="movie" />映画</label>
<label><input type="checkbox" name="hobby[]" value="etc" />その他</label>
name:チェックボックスの名前→配列扱い
options:value→配列のキー output→配列の要素 となる連想配列
selected:選択済みにするチェックボックス要素
→例は入力画面から受け取ったキーを指定している