忍者ブログ
[PR]
×

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



2024/04/27 08:36 |
PHP5.3 Smartyのhtml_select_dateで任意の名前を指定
{html_select_date}はYYYY年MM月DD日という表現が一発ではできないというのは昔言いましたが、実はもっと不便なことがあり、実はフォームの名前に任意の値を設定できません。
たとえば{html_select_date prefix="hoge"}とすると
 <select name="hogeYear">
 <select name="hogeMonth">
 <select name="hogeDay">

という名前が自動的に設定されます。

{html_select_date field_array="hoge"}にすると、
 <select name="hoge[Date_Year]">
 <select name="hoge[Date_Month]">
 <select name="hoge[Date_Day]">

と配列形式にもできます。

しかし、何故か
 <select name="yearHoge">
 <select name="monthHoge">
 <select name="dayHoge">

といった任意の値を設定することはできません。

> 以下の属性リストに無いパラメータが与えられた場合は、 作成された年、月、日の各 <select> タグの内側に 名前/値 のペアで表されます。
ということで{html_select_date name="hoge"}にすると、
 <select name="Date_Year" name="hoge">
と残念なことに。

色々検討したのですが、どうやら直接ソースを変更する以外に対処法は見当たらないようでした。

まずデフォルト値設定に↓を追加。
    $year_name = "Year";
    $month_name = "Month";
    $day_name = "Day";


次に引数確認部分、
    $$_key = (string)$_value;
の直前に↓を追加。
    case 'month_name':
    case 'day_name':
    case 'year_name':


最後に
if ($display_years) {
    $_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year');
}


のところを、
if ($display_years) {
    $_name = $field_array ? ($field_array . '[' . $prefix . $year_name .']') : ($prefix . $year_name);
}

と変更します($display_months、$display_daysも同様)

これで、以下のように任意のnameにすることができます。

{html_select_date year_name="hoge"}
 <input name="Date_hoge">

{html_select_date year_name="hoge" field_array="fuga" prefix=""}
 <input name="fuga[hoge]">

見てのとおり10行かそこらの変更です。
どうして任意値対応してくれないんでしょうか。

ところでsmarty_function_html_select_date()を見ていたら、リファレンスに載っていないオプションを幾つか見つけました。

$all_id
$day_id
$month_id
$year_id

<select>にid属性を指定します。
未設定だとid属性自体無し、falseだとnameと同じ値、設定するとidが"入力値+nameの値"になります。

$all_empty
単純にyear_empty+month_empty+day_emptyです。

$option_separator
</option>と<option>の間にテキストを配置します。
画面上には表示されないのでCSSやJavaScript用でしょうか。
PR


2012/10/05 22:34 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<Minecraft1.3.2 Conspicuous Shears 付加機能付きはさみを追加する | HOME | Minecraft1.3.2 空中にブロックを設置するMOD 1.3.2.0>>
忍者ブログ[PR]