CodeIgniter日历每天添加多个事件? [英] CodeIgniter calendar to add multiple events per day?

查看:172
本文介绍了CodeIgniter日历每天添加多个事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆