2

私はCakePHP2.1を使用しており、ユーザーの生年月日を取得するための日付フィールドがあります。

例えば

echo $this->Form->input('Profile.dob', array('label' => 'Date of Birth'
                                        , 'dateFormat' => 'DMY'
                                        , 'empty' => array('DATE','MONTH','YEAR')
                                        , 'minYear' => date('Y') - 110
                                        , 'maxYear' => date('Y') - 0));

ご覧のとおり、配列を使用してデフォルト値を設定しようとしましたが、すべてのデフォルト値がDATEになっているだけです。各ドロップダウンが正しい値になるようにするにはどうすればよいですか?

4

6 に答える 6

6

これは少しハックで非常に醜いですが、このemptyオプションは複数の値をサポートしていないように見えるため、関数全体を書き直したい場合を除いて、おそらく最も簡単な解決策ですdateTime()str_replace残念ながら、交換の数を制限することはできません。そのため、に頼らなければなりませんpreg_replace

$placeholder = '[RandomStringWhichDoesNotAppearInTheMarkup]';

$out = $this->Form->input('Profile.dob', array('label' => 'Date of Birth'
                                            , 'dateFormat' => 'DMY'
                                            , 'empty' => $placeholder
                                            , 'minYear' => date('Y') - 110
                                            , 'maxYear' => date('Y') - 0));

$escapedPlaceholder = preg_quote($placeholder, '/');
$out = preg_replace("/$escapedPlaceholder/", 'DATE', $out, 1);
$out = preg_replace("/$escapedPlaceholder/", 'MONTH', $out, 1);
$out = preg_replace("/$escapedPlaceholder/", 'YEAR', $out, 1);

echo $out;
于 2012-07-23T10:12:42.453 に答える
5

必要な機能が実装され、次のリリースで利用できるようになります。現在、githubからマスターブランチをチェックアウトして、このパッチを入手できます。使用例については、リンクされたコミットのテストケースを確認してください。現在cakephp2.1を使用している場合は、マスターブランチが2.2 devブランチであるため、マニュアルの2.1から2.2への移行ガイドをお読みください。

于 2012-07-27T20:29:20.460 に答える
4

私はこれをチェックしましたそれは必要とされる同じ出力を与えるでしょう:このコードは与えられたデフォルト値で同じドロップダウンボックスを生成し、投稿データは同じになります:

echo $this->Form->day('Profile.dob', array('empty'=>'Day'));
echo $this->Form->month('Profile.dob', array('empty'=>'Month'));
echo $this->Form->year('Profile.dob', 1950, date('Y'),array('empty'=>'Year'));
于 2012-07-25T13:00:02.083 に答える
3
<?php
echo $form->input('date', array(
'type'  => 'date',
'label' => 'Date',
'empty' => TRUE,
'minYear' => 2000,
'dateFormat' => 'DMY',
'maxYear' => date('Y'),
'minYear' => date('Y') - 10
# default order m/d/y

));
?>

その目覚めのような魅力

編集:-(簡単なjqueryコードでこれを行うことができます)カスタマイズされた日付の空の値が必要な場合は、jquery.jsが含まれているヘッダーにこのjqueryスクリプトを追加します。

<script type="text/javascript">     

        // var valid=true;

        jQuery(document).ready( function() {

            $("#dateDay option:first").text('DAY');
            $("#dateMonth option:first").text('MONTH');
            $("#dateYear option:first").text('YEAR');


        });




</script>

ここに画像の説明を入力してください

オプションフィールドIDを使用してID#dateDay、#dateMonth、#dateYearを変更します。これをカスタマイズして、すべてのcakephp-dateフィールドで機能するようにすることができます。

于 2012-07-23T10:13:13.547 に答える
3
<?php echo $this->Form->input('birth_dt', array( 'label' => 'Date of birth'
        , 'dateFormat' => 'DMY'
        , 'minYear' => date('Y') - 70
        , 'maxYear' => date('Y') - 18 ));
?>

//また

<?php
echo $this->Form->year('Profile.dob', date('Y') - 100, date('Y') - 13, array('empty' => "YEAR"));
echo $this->Form->month('Profile.dob', array('empty' => "MONTH"));
echo $this->Form->day('Profile.dob', array('empty' => 'DAY'));
?>
于 2012-07-28T17:58:24.723 に答える
0

このように実装しました

echo $this->Form->dateTime('dob', 'DMY','', array('value'=>'1987-02-12','empty'=>false,'label'=>'','minYear'=>date('Y')-60,'maxYear'=>date('Y')-15));

「value」属性はcakephpの2.0apiの後に追加され、「selected」は削除されました

2.0更新$selectedパラメーターが削除されました

$ selectedパラメーターは、FormHelperのいくつかのメソッドから削除されました。すべてのメソッドが$attributes['value']キーをサポートするようになりました。これは、$selectedの代わりに使用する必要があります。この変更により、FormHelperメソッドが簡素化され、引数の数が減り、$selectedが作成した重複が減ります。影響を受けるメソッドは次のとおりです。

FormHelper::select()
FormHelper::dateTime()
FormHelper::year()
FormHelper::month()
FormHelper::day()
FormHelper::hour()
FormHelper::minute()
FormHelper::meridian()
于 2013-03-05T09:49:41.847 に答える