研修(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:選択済みにするチェックボックス要素
→例は入力画面から受け取ったキーを指定している