Smartyには、変数を格納して表示する以外に、テンプレートを作成する上で便利な機能がいくつも存在します。
試しに{html_select_date}と書いてみると、いきなり生年月日選択フォームができあがります。
後は適当にオプションを突っ込めば面倒な日付選択フォームがあっさり完成します。
html_select_date.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//Smarty
require_once('./../smarty/libs/Smarty.php');
//取得した日時
$request_datetime=mktime(
$_REQUEST['Time_Hour']
,$_REQUEST['Time_Minute']
,$_REQUEST['Time_Second']
,$_REQUEST['Date_Month']
,$_REQUEST['Date_Day']
,$_REQUEST['Date_Year']
);
$smarty->assign('request_datetime',$request_datetime);
//表示
$smarty->display('html_select_date.html');
|
html_select_date.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<html><body>
<form method="POST" action="html_select_date.php">
{html_select_date field_order='Y'
start_year='-10' end_year='+10' time=$request_date}年
{html_select_date field_order='M'
month_format='%m' time=$request_date}月
{html_select_date field_order='D'
time=$request_date}日
{html_select_time display_hours=true
display_minutes=false display_seconds=false time=$request_date}時
{html_select_time display_hours=false
display_minutes=true display_seconds=false time=$request_date}分
{html_select_time display_hours=false
display_minutes=false display_seconds=true time=$request_date}秒
<input type="submit" value="送信">
</form>
</body></html>
|
実行するとこのようなフォームが現れます。
年 月 日 時 分 秒
問題点としては、フィールドの区切りに任意の値を設定できないので、YYYY年MM月DD日みたいなフォーマットを作るには、上記のように<select>単位で区切らなければなりません。
しかし、うんざりするほど長大な<select><option>を書くことや(ここのソースを見てみましょう)、{foreach}なんかでややこしいループを書くことに比べれば、圧倒的に楽です。
しかし{html_select_date}と{html_select_time}のオプションが何故か違うとか、month_formatとday_formatはあるのにyaer_formatは無いとか、なんか微妙に気持ち悪い仕様なのはどうにかならないんでしょうか。
PR
トラックバック
トラックバックURL: