忍者ブログ
~お前もこの 気持ちよさにやられちまいな~
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

smartyで簡単に年月日のセレクトボックスを使用する方法
年月日のセレクトボックスは結構頻繁に使用ます。
が、テンプレート化して、毎回それを使用するほどは使用頻度が高くなくめんどくさくはない。
でも毎回1からコードを書くのは非常にめんどいです。

そんな時smartyのカスタム関数html_select_dateを使うと一発です。
うん。こんな便利な関数があるなんて知らなかった。やっぱりマニュアルは一度は目を通すべきですね。
本日の説明はマニュアルを読んでしまえば、全部載ってる事ですがお気になさらずに。

ではでは・・・

html_select_dateには属性が複数あります。
ここでは実務に必要かと思われるものだけを載せます。
詳しくはマニュアル参照ってことで。

属性名 入力値型 初期値 説明
prefix string Date_  出力される<select>タグのname属性の接頭語。
ここの値+(Month or Day or Year)がname属性に。
time timestamp
or
YYYY-MM-DD
現在時間 各セレクトボックスのselectedに使われる模様。
ここで指定した時間が初期値になるみたい。
start_year string string 年のセレクトボックスのリストの最初の年。
年を表す数字か、現在から+or- nで加減が指定できる。
end_year string start_yearの値 年のセレクトボックスのリストの最後の年。
年を表す数字か、現在から+or- nで加減が指定できる。
display_days boolean true 日のセレクトボックスを表示するかどうか。
falseを値で指定すると表示しない。
display_months boolean true 月のセレクトボックスを表示するかどうか。
falseを値で指定すると表示しない。
display_years boolean true 年のセレクトボックスを表示するかどうか。
falseを値で指定すると表示しない。
all_extra string null 年月日すべてのセレクトボックスの<select>タグに記述属性を追加する。
値でid="foo"などを指定すると年月日すべての<select>タグにIDを指定できる
day_extra string null 日のセレクトボックスの<select>タグに記述属性を追加する。
値でid="foo"などを指定すると日の<select>タグにIDを指定できる
month_extra string null 月のセレクトボックスの<select>タグに記述属性を追加する。
値でid="foo"などを指定すると月の<select>タグにIDを指定できる
year_extra string null 年のセレクトボックスの<select>タグに記述属性を追加する。
値でid="foo"などを指定すると年の<select>タグにIDを指定できる
day_empty string null 日のセレクトボックスの一番最初にlabelが文字列、valueが""の要素を持たせる。
month_empty string null 月のセレクトボックスの一番最初にlabelが文字列、valueが""の要素を持たせる。
year_empty string null 年のセレクトボックスの一番最初にlabelが文字列、valueが""の要素を持たせる。

以降は入出力例を幾つか紹介します

例1

tpl
<!--実行日が2009/01/20の場合-->
{html_select_date}

出力html
<!--実行日が2009/01/20の場合-->
<select name="Date_Month">
<option label="1月" value="01" selected="selected">1月</option>


<option label="12月" value="12">12月</option>
</select>
<select name="Date_Day">
<option label="01" value="1">01</option>

<option label="02" value="2">02</option>


<option label="19" value="19">19</option>

<option label="20" value="20" selected="selected">20</option>
<option label="21" value="21">21</option>


<option label="30" value="30">30</option>
<option label="31" value="31">31</option>
</select>
<select name="Date_Year">
<option label="2009" value="2009" selected="selected">2009</option>
</select>

何も指定しない場合。
年のリストが実行した年しかないので使い物になりませんね。


例2

tpl
<!--実行日が2009/01/20の場合-->
{html_select_date prefix="Foo" time="2010-03-10"}

出力html
<!--実行日が2009/01/20の場合-->
<select name="FooMonth">
<option label="1月" value="01">1月</option>
<option label="2月" value="02">2月</option>
<option label="3月" value="03" selected="selected">3月</option>

<option label="4月" value="04">4月</option>


<option label="11月" value="11">11月</option>
<option label="12月" value="12">12月</option>

</select>
<select name="FooDay">
<option label="01" value="1">01</option>
<option label="02" value="2">02</option>


<option label="09" value="9">09</option>
<option label="10" value="10" selected="selected">10</option>
<option label="11" value="11">11</option>


<option label="30" value="30">30</option>
<option label="31" value="31">31</option>
</select>
<select name="FooYear">
<option label="2009" value="2009">2009</option>
<option label="2010" value="2010">2010</option>


<option label="2014" value="2014">2014</option>
<option label="2015" value="2015" selected="selected">2015</option>
</select>

各<select>タグのname属性の接頭語がFooになった。
timeで現在年以後を指定すると、end_yearの指定がなくてもtime指定年数までリストが生成されるようだ。

例3

tpl
<!--実行日が2009/01/20の場合-->
{html_select_date time="2001-12-31" display_days=false}

出力html
<!--実行日が2009/01/20の場合-->
<select name="Date_Month">
<option label="1月" value="01">1月</option>
<option label="2月" value="02">2月</option>


<option label="11月" value="11">11月</option>
<option label="12月" value="12" selected="selected">12月</option>

</select>
<select name="Date_Year">
<option label="2001" value="2001" selected="selected">2001</option>
<option label="2002" value="2002">2002</option>


<option label="2008" value="2008">2008</option>

<option label="2009" value="2009">2009</option>
</select>

display_days=falseでfalseを指定したことで月のセレクトボックスは表示されない。
boll型の値は"や'で囲ってしまうと効かなくなるので注意すること。

timeで現在年以前を指定すると、以後を指定した場合と同じ出力がされるようだ。

例4

tpl
<!--実行日が2009/01/20の場合-->
{html_select_date start_year="1999" end_year="+5" year_empty="年を編集してください" year_extra='id="foo"'}

出力html
<!--実行日が2009/01/20の場合-->
<select name="Date_Month">
<option label="1月" value="01" selected="selected">1月</option>
<option label="2月" value="02">2月</option>


<option label="11月" value="11">11月</option>
<option label="12月" value="12">12月</option>

</select>
<select name="Date_Day">
<option label="01" value="1">01</option>
<option label="02" value="2">02</option>
<option label="03" value="3">03</option>
<option label="04" value="4">04</option>
<option label="05" value="5">05</option>
<option label="06" value="6">06</option>
<option label="07" value="7">07</option>
<option label="08" value="8">08</option>

<option label="09" value="9">09</option>
<option label="10" value="10">10</option>
<option label="11" value="11">11</option>
<option label="12" value="12">12</option>
<option label="13" value="13">13</option>
<option label="14" value="14">14</option>
<option label="15" value="15">15</option>
<option label="16" value="16">16</option>
<option label="17" value="17">17</option>

<option label="18" value="18">18</option>
<option label="19" value="19">19</option>
<option label="20" value="20" selected="selected">20</option>
<option label="21" value="21">21</option>
<option label="22" value="22">22</option>
<option label="23" value="23">23</option>
<option label="24" value="24">24</option>
<option label="25" value="25">25</option>
<option label="26" value="26">26</option>

<option label="27" value="27">27</option>
<option label="28" value="28">28</option>
<option label="29" value="29">29</option>
<option label="30" value="30">30</option>
<option label="31" value="31">31</option>
</select>
<select name="Date_Year" id="foo">
<option label="年を編集してください" value="">年を編集してください</option>
<option label="1999" value="1999">1999</option>
<option label="2000" value="2000">2000</option>



<option label="2008" value="2008">2008</option>
<option label="2009" value="2009" selected="selected">2009</option>

<option label="2010" value="2010">2010</option>



<option label="2013" value="2013">2013</option>
<option label="2014" value="2014">2014</option>

</select>

start_year、end_yearの指定によって1999から2009+5=2014までのリストが作成されている
year_emptyの指定によって
<option label="年を編集してください" value="">年を編集してください</option>
が作成されたが、timeの指定がなくても、2009にselectedが入ってしまい、year_emptyによって生成された値にselectedを入れる方法はわからなかった。
year_extraの指定により、年のセレクトボックスにidがセットされている。
year_extraの指定は

year_extra='id="foo"'
なり
year_extra="id='foo'"
にすること。

しかし結局、~_emptyにselectedを着けることができなかった・・・
seletedつけなかったら意味あるんだろうか?

ちなみにボクはこれでフォームを作ったら、CSSデザイナーに
「わけわかんねーhtml吐くコード使うんじゃねーよヴぉけ!
なんだ『selected="selected"』って!
デザインの自由度下がるから変なことせずに大人しくsectionとifでコード書け間抜け!!
これだからどうt(ry」

(意訳)
って言われて結局いつも通りsectionやらなにやら使って書いてます。

まぁマニュアル読めばわかること+幾つかの例だけなんだけど。
この記事に2時間もかかってしまった・・・あんまり意味ないだろ・・・常識的に考えて・・・
PR
コメントを投稿する

HN
タイトル
メールアドレス
URL
コメント
パスワード
カレンダー

03 2017/04 05
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
ブログ内検索

プロフィール

中の人:
お仕事:
見習いプログラマー
趣味:
ネット、アニメ、音楽、チャリ
一言:
エロゲからクラブミュージックまで。
おじさんの趣味は108式まであるゆぉ~(・3・)