CodeIgniter日历每天添加多个事件? [英] CodeIgniter calendar to add multiple events per day?
问题描述
我正在使用CodeIgniter Calendar Library创建一个日历视图。
我每天有多个事件,但日历每天仅显示一个事件。
如果一天有多个事件,它只显示最后一个事件。 / p>
如果有人可以帮助我修改我的代码,请感谢。
最好的问候
控制器
函数日历($ year = null,$ month = null)
{
$ calendar = $ this-> timesheet_model-> get_calendar($ year,$ month);
$ data = array('title'=>'Calendar | Onsys',
'main_content'=>'view_timesheet_calendar',
'calendar'=> $日历
);
$ this-> load-> view('template',$ data);
}
模型(不含日历模板)
function get_calendar($ year,$ month)
{
$ calendar_settings = array('start_day'=>'monday',
'show_next_prev'=> true,
'next_prev_url'=> base_url('timesheet / calendar'));
$ calendar_settings ['template'] ='';
$ events = $ this-> get_tasks($ year,$ month);
$ this-> load-> library('calendar',$ calendar_settings);
return $ this-> calendar-> generate($ year,$ month,$ events);
}
函数get_tasks($ year,$ month)
{
$ events = array
$ this-> db-> select('projecttasksid,taskname,taskstartdate') - > from('projecttasks') - > like('taskstartdate',$ year- $月);
$ sql_stmt = $ this-> db-> get();
$ sql_stmt = $ sql_stmt-> result();
foreach($ sql_stmt as $ row)
{
$ day =(int)substr($ row-> taskstartdate,8,2);
$ events [$ day] = $ row-> taskname;
}
return $ events;
}
库是这个..
从system / libraries / calendar.php'编辑此行#301'
//没有内容的单元格
$ temp =($ is_current_month === TRUE&& $ day == $ cur_day)?
$ this-> replacementments ['cal_cell_no_content_today']:$ this-> replacementments ['cal_cell_no_content'];
$ out。= str_replace('{day}',$ day,$ temp);
到
$ temp =($ is_current_month === TRUE&& $ day == $ cur_day)?
$ this-> replacementments ['cal_cell_content_today']:$ this-> replacementments ['cal_cell_content'];
if(count($ data [$ day])> 1){// edit open
$ addition ='';
foreach($ data [$ day] as $ item_key => $ item_value){
$ addition。='< a href ='。site_url('events / info /'.$ item_value ['id'])。'>'。$ item_value ['content']。'< / a>< br>';
}
$ out。= str_replace(array('{content}','{day}'),array($ addition,$ day),$ temp);
} else {
$ event_url ='< a href ='。site_url('events / info /'.$ data [$ day] [0] ['id'] )。'>'。$ data [$ day] [0] ['content']。'< / a>';
$ out。= str_replace(array('{content}','{day}'),array($ event_url,$ day),$ temp);
}
以下更改将使用锚包装数据。
<$ c $ c> $ cal_data = array();
$ dateData = array(
'year'=> $ year,
'month'=> $ month
);
$ result = $ this-> model_events-> getDate($ dateData);
if($ result!== NULL){
foreach($ result as $ key => $ value){
$ name = $ value-> cus_fn。 ''。$ value-> cus_mn。''。$ value-> cus_ln;
$ day = substr($ value-> sched_date,strlen($ value-> sched_date) - 2,2);
if(substr($ day,0,1)=='0')$ day = substr($ day,1,1);
if(isset($ cal_data [$ day])){
array_push($ cal_data [$ day],array('id'=> $ value-> reservation_id, content'=> $ name));
} else {
$ cal_data [$ day] = array(array(
'id'=> $ value-> reservation_id,
' => $ name
));
}
}
}
$ data ['cal'] = $ this-> calendar-> generate($ year,$ month,$ cal_data);
就是这样。
I am creating a Calendar view using CodeIgniter Calendar Library. I have multiple events per day but calendar shows only one event per day.
If the day has more than one events it shows only the last event.
Would appreciate if someone can help me to modify my coding below.
Best regards
Controller
function calendar($year=null, $month=null)
{
$calendar = $this->timesheet_model->get_calendar($year, $month);
$data = array('title' => 'Calendar | Onsys',
'main_content' => 'view_timesheet_calendar',
'calendar' => $calendar
);
$this->load->view('template', $data);
}
Model (without calendar template)
function get_calendar($year, $month)
{
$calendar_settings = array( 'start_day' => 'monday',
'show_next_prev' => true,
'next_prev_url' => base_url('timesheet/calendar') );
$calendar_settings['template'] = '';
$events = $this->get_tasks($year, $month);
$this->load->library('calendar', $calendar_settings);
return $this->calendar->generate($year, $month, $events);
}
function get_tasks($year, $month)
{
$events = array();
$this->db->select('projecttasksid,taskname,taskstartdate')->from('projecttasks')->like('taskstartdate', "$year-$month");
$sql_stmt = $this->db->get();
$sql_stmt = $sql_stmt->result();
foreach( $sql_stmt as $row )
{
$day = (int)substr($row->taskstartdate, 8,2);
$events[$day] = $row->taskname;
}
return $events;
}
Another way to modify the calendar library is this..
edit this line from system/libraries/calendar.php 'line#301'
// Cells with no content
$temp = ($is_current_month === TRUE && $day == $cur_day) ?
$this->replacements['cal_cell_no_content_today'] : $this->replacements['cal_cell_no_content'];
$out .= str_replace('{day}', $day, $temp);
to
$temp = ($is_current_month === TRUE && $day == $cur_day) ?
$this->replacements['cal_cell_content_today'] : $this->replacements['cal_cell_content'];
if (count($data[$day]) > 1) {//edited open
$addition ='';
foreach ($data[$day] as $item_key => $item_value) {
$addition .= '<a href="'.site_url('events/info/'.$item_value['id']).'">'.$item_value['content'].'</a><br>';
}
$out .= str_replace(array('{content}', '{day}'), array($addition, $day), $temp);
}else{
$event_url = '<a href="'.site_url('events/info/'.$data[$day][0]['id']).'">'.$data[$day][0]['content'].'</a>';
$out .= str_replace(array('{content}', '{day}'), array($event_url, $day), $temp);
}
The following changes will wrap the data with anchor. I did this for specific reason.
Then create your data like this
$cal_data = array();
$dateData = array(
'year' => $year,
'month' => $month
);
$result = $this->model_events->getDate($dateData);
if ($result !== NULL) {
foreach ($result as $key => $value) {
$name = $value->cus_fn.' '.$value->cus_mn.' '.$value->cus_ln;
$day = substr($value->sched_date, strlen($value->sched_date) - 2, 2);
if (substr($day, 0, 1) == '0') $day = substr($day, 1, 1);
if(isset($cal_data[$day])){
array_push($cal_data[$day], array('id'=>$value->reservation_id, 'content'=>$name));
}else{
$cal_data[$day] = array(array(
'id' => $value->reservation_id,
'content' => $name
));
}
}
}
$data['cal'] = $this->calendar->generate($year, $month, $cal_data);
and thats it.
这篇关于CodeIgniter日历每天添加多个事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!