我正在使用CakePHP 2.1并有一个日期字段来获取用户的出生日期:
e.g。
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。如何获得它以使每个下拉列表具有正确的值?
答案 0 :(得分: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;
答案 1 :(得分:5)
您想要的功能现在是implemented,将在下一版本中提供。目前你可以从github签出master分支来获得这个补丁。检查链接提交中的测试用例以获取用法示例。如果您当前正在使用cakephp 2.1,请阅读本手册中的2.1到2.2迁移指南,因为主分支是2.2 dev分支。
答案 2 :(得分: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'));
答案 3 :(得分: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字段。
答案 4 :(得分:3)
<?php echo $this->Form->input('birth_dt', array( 'label' => 'Date of birth'
, 'dateFormat' => 'DMY'
, 'minYear' => date('Y') - 70
, 'maxYear' => date('Y') - 18 ));
?>
// OR
<?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'));
?>
答案 5 :(得分:0)
我像这样实现了它
echo $this->Form->dateTime('dob', 'DMY','', array('value'=>'1987-02-12','empty'=>false,'label'=>'','minYear'=>date('Y')-60,'maxYear'=>date('Y')-15));
'value'属性已经在2.0 api的cakephp之后添加,'selected'被删除
2.0更新 已删除$ selected参数
已从FormHelper中的多个方法中删除$ selected参数。现在所有方法都支持$ attributes ['value']键,应该用它代替$ selected。此更改简化了FormHelper方法,减少了参数的数量,并减少了$ selected创建的重复项。受影响的方法是:
FormHelper::select()
FormHelper::dateTime()
FormHelper::year()
FormHelper::month()
FormHelper::day()
FormHelper::hour()
FormHelper::minute()
FormHelper::meridian()