{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用でしょうか。
たとえば{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