继承我的代码:
//Setup days
$data['days']['FALSE'] = 'Day';
//Setup months
$data['months'] = array('FALSE' => 'Month',
'1' => 'Jan',
'2' => 'Feb',
'3' => 'Mar',
'4' => 'Apr',
'5' => 'May',
'6' => 'Jun',
'7' => 'Jul',
'8' => 'Aug',
'9' => 'Sep',
'10' => 'Oct',
'11' => 'Nov',
'12' => 'Dec'
);
for($i=1;$i<=31;$i++){
$data['days'][$i] = $i;
}
//Setup years
$start_year = date("Y",mktime(0,0,0,date("m"),date("d"),date("Y")-100)); //Adjust 100 to however many year back you want
$data['years']['FALSE'] = 'Year';
for ($i=$start_year;$i<=date("Y");++$i) {
$data['years'][$i] = $i;
}
这是我的if语句:
if($this->form_validation->run()){
$month = $this->input->post('months');
$day = $this->input->post('days');
$year = $this->input->post('years');
$birthday = date("m-d-Y H:i:s",mktime(0,0,0,$month,$day,$year));
}
这是我在视图中的表单中的相应代码:
<p>
<label for="birthday">Birthday: </label>
<?php echo form_dropdown('days',$days). " " . form_dropdown('months',$months). " " . form_dropdown('years',$years); ?>
</p>
当我将datepicker代码直接放在我的控制器中时,我的表单上的下拉菜单显示正确。我希望对我的编码保持整洁,所以决定创建一个模型并尝试从我的控制器进行调用,但是当我的视图试图显示表单时,我得到了几次未定义的变量错误。
我做了一些研究,并想知道是否最好让我的日期选择器成为帮助者“datepicker_helper.php”将代码放入其中并将其加载到我的控制器中。
这是最好的方法吗?
如果是这样,有人能给我一个如何做到这一点的例子吗?如果还有其他方式可以有人给我看看吗?
提前致谢..我来这里学习..
答案 0 :(得分:1)
许多开发人员 - 包括我自己 - 已经开发了自己的代码版本。我想在这里指出两个问题。
首先,你已经在这里迷失了一种虚假的安全感。有界选择元素不能也不能保证每个请求都包含有效日期。绝不相信输入。始终验证。使用您自己的日期验证函数扩展Form_validation类。
其次,让用户拉下三个下拉列表(没有在所有请求中有效日期的缓解保证)是非常糟糕的用户体验,尤其是在用户需要填充多个日期(开始日期/结束日期,里程碑日期,等)。
在我理解了这两件事后,我从我的网站中重构了这一点。现在我的日期字段是输入类型文本,带有一个标签,指定日期的预期格式。我的Form_validation类已扩展为验证日期字段。我已将a real datepicker添加到表单中。
答案 1 :(得分:0)
帮助者听起来对此最有效。为此,请查看documentation和此SO question
在旁注中,我对可能在多个框架,应用程序或位置中使用的此类通用代码所做的工作如下:
在这种情况下,您的form_dropdown
只是所述文件中的静态函数:
class My_Utils {
public static function form_dropdown($param1, $param2) {
}
}
你会用它:
echo My_Utils::form_dropdown('days',$days)