初めてのシステムと日記

システムも日記も初めてです。

研修(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関数を使うことができる。

演算子の書き方が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:選択済みにするチェックボックス要素

→例は入力画面から受け取ったキーを指定している