CakePHP:具有默认值的日期字段
我使用的是CakePHP 2.1,有一个日期字段来获取用户的出生日期: e、 gCakePHP:具有默认值的日期字段,php,cakephp,Php,Cakephp,我使用的是CakePHP 2.1,有一个日期字段来获取用户的出生日期: e、 g 如您所见,我尝试使用数组设置默认值,但它只是使它们都具有默认值DATE。如何获得它,使每个下拉列表都有正确的值?这有点麻烦,而且相当难看,但由于空选项似乎不支持多个值,这可能是最简单的解决方案-除非您想重写整个dateTime()函数str_replace不幸的是不允许限制替换的数量,这就是为什么我们必须求助于preg_replace $placeholder = '[RandomStringWhichDoesNo
如您所见,我尝试使用数组设置默认值,但它只是使它们都具有默认值DATE。如何获得它,使每个下拉列表都有正确的值?这有点麻烦,而且相当难看,但由于
空
选项似乎不支持多个值,这可能是最简单的解决方案-除非您想重写整个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;
它有着令人惊叹的魅力
编辑:-(您可以使用简单的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>
//var valid=true;
jQuery(文档).ready(函数(){
$(“#日期选项:第一”).text('DAY');
$(“#dateMonth选项:first”).text('MONTH');
$(“#日期年选项:第一”).text('YEAR');
});
使用选项字段id更改id#dateDay、#dateMonth、#dateYear……您可以自定义此选项,使其适用于每个cakephp日期字段。我已选中此选项,它将提供所需的相同输出: 此代码将生成具有给定默认值的相同下拉框,并且post数据将相同:
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'));
您想要的功能现在已经提供,将在下一版本中提供。目前,您可以从github签出主分支以获得此修补程序。检查链接提交中的测试用例以了解用法示例。如果您当前正在使用cakephp 2.1,请阅读手册上的2.1到2.2迁移指南,因为主分支是2.2开发分支。
<?php echo $this->Form->input('birth_dt', array( 'label' => 'Date of birth'
, 'dateFormat' => 'DMY'
, 'minYear' => date('Y') - 70
, 'maxYear' => date('Y') - 18 ));
?>
//或
我是这样实现的
echo $this->Form->dateTime('dob', 'DMY','', array('value'=>'1987-02-12','empty'=>false,'label'=>'','minYear'=>date('Y')-60,'maxYear'=>date('Y')-15));
在cakephp的2.0 api之后添加了“value”属性,并删除了“selected”
2.0更新
$selected参数已删除
$selected参数已从FormHelper中的几个方法中删除。所有方法现在都支持$attributes['value']键,应该使用它来代替$selected。此更改简化了FormHelper方法,减少了参数数量,并减少了$SELECT创建的重复。有效的方法有:
FormHelper::select()
FormHelper::dateTime()
FormHelper::year()
FormHelper::month()
FormHelper::day()
FormHelper::hour()
FormHelper::minute()
FormHelper::meridian()
如果不黑客攻击源代码,那么从这个角度来看,这似乎是不可能的。您可以在输出前操作返回的标记并替换占位符。空选项标签与默认值不同。并且可以为每个日期/日期时间选择列表设置单独的默认值和空标签。使用
值
参数设置默认值。可以分别使用FormHelper::day()
、FormHelper::month()
和FormHelper::year()
设置单独的空标签。我将OPs问题解释为是否可以添加默认提示值(本例中为空值)-在这种情况下,每个下拉列表都不同。您可以通过简单的jquery infact@mogelbrod:)是的,这确实是可能的,但是使用客户端JS来修复CakePHP中的一个缺点可能并不总是首选:)因为空的占位符字符串将作为选项插入每个(所有三个)下拉列表中,您只需逐个替换占位符文本(使用preg\u replace
)与你想要的文本。绝对是最好的选择,如果你是在摆脱了丑陋的黑客在你的代码
<?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'));
?>
echo $this->Form->dateTime('dob', 'DMY','', array('value'=>'1987-02-12','empty'=>false,'label'=>'','minYear'=>date('Y')-60,'maxYear'=>date('Y')-15));
FormHelper::select()
FormHelper::dateTime()
FormHelper::year()
FormHelper::month()
FormHelper::day()
FormHelper::hour()
FormHelper::minute()
FormHelper::meridian()