如何修改CodeIgniter日历以处理每天多个事件? [英] How to modify CodeIgniter calendar to handle multiple events per day?

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

问题描述

我正在创建一个没有jquery日历插件的日历。我可以检索数据库中的数据到日历。但是,当每天有多个数据时,日历视图中只有一个数据。当有多个数据时,我想要这样。





但是当有多个数据时,我得到的是





第16天每四个数据。只有一个。



$ b

以下是我的代码

控制器

 <?php 

class My_calendar extends CI_Controller {

public function index($ year = null,$ month = null){
echoMy calendar project;
$ this-> showcal($ year,$ month);
}

public function showcal($ year = null,$ month = null){
$ this-> load-> model('mycal_model');
$ data ['calendar'] = $ this-> mycal_model-> generate($ year,$ month);

$ this-> load-> view('mycal',$ data);
}

}

查看

 <!DOCTYPE html> 
< html lang =en>
< head>
< meta charset =utf-8>
< title>欢迎使用CodeIgniter< / title>

< style type =text / css>



#body {
margin:0 15px 0 15px;
}



#container {
margin:10px;
border:1px solid#D0D0D0;
-webkit-box-shadow:0 0 8px#D0D0D0;
}


.calendar {
/ * background-color:yellow; * /
}
table.calendar {
margin:auto;
border-collapse:collapse;
}
.calendar .days td {
width:80px;
height:90px;
padding:4px;
border:1px solid#999;
vertical-align:top;
background-color:#DEF;

}
.calendar .days td:hover {
background-color:#fff;
}
.calendar .highlight {
font-weight:bold;
color:#EF1BAC;
}
.calendar .content .gk_am {
float:left;
display:inline-block;
width:40px;
background-color:#D0D0D0;
}
.calendar .content .gk_pm {
float:right;
display:inline-block;
width:40px;
background-color:red;
}

.calendar .content .rp_am {
float:left;
display:inline-block;
width:40px;
background-color:gray;
}

.calendar .content .rp_pm {
float:right;
display:inline-block;
width:40px;
background-color:#D893A1;
}
< / style>
< / head>
< body>

< div id =container>

< div id =body>
<?PHP echo $ calendar; ?>

< / div>


< / div>

< / body>
< / html>

模型

 <?php 

class mycal_model extends CI_Model {

function __construct(){
parent :: __ construct );
$ this-> mycal_model();
}

function mycal_model(){

$ this-> conf = array(
'show_next_prev'=> True,
'next_prev_url'=> base_url()。index.php / my_calendar / index /'
);

$ this-> conf ['template'] ='
{table_open}< table cellpadding =1cellspacing =2class =calendar> table_open}

{heading_row_start}< tr> {/ heading_row_start}

{heading_previous_cell}< th class =prev_sign>< a href ={previous_url gt;< / col>< / col>< / a>< / th> {/ heading_previous_cell}
{heading_title_cell}< th colspan ={colspan}> / th> {/ heading_title_cell}
{heading_next_cell}< th class =next_sign>< a href ={next_url}>& gt;& gt;< / a> ; / th> {/ heading_next_cell}

{heading_row_end}< / tr> {/ heading_row_end}

//决定在哪一行开始
{week_row_start }< tr class =week_name> {/ week_row_start}
//决定周日单元格和星期几
{week_day_cell}< td> {week_day}< / td& week_day_cell}
// week row end
{week_row_end}< / tr> {/ week_row_end}

{cal_row_start}< tr class =days> {/ cal_row_start}
{cal_cell_start}< td> {/ cal_cell_start}

{cal_cell_content}
< div class =day_num> {day}
< ; / div>
< div class =content> {content}
< / div>
{/ cal_cell_content}

{cal_cell_content_today}
< div class =day_num highlight> {day}< / div>
< div class =content> {content}< / div>
{/ cal_cell_content_today}

{cal_cell_no_content}< div class =day_num> {day}< / div> {/ cal_cell_no_content}
{cal_cell_no_content_today}< div class =day_num highlight> {day}< / div> {/ cal_cell_no_content_today}

{cal_cell_blank}& nbsp; {/ cal_cell_blank}

{cal_cell_end }< / td> {/ cal_cell_end}
{cal_row_end}< / tr> {/ cal_row_end}

{table_close}< / table> {/ table_close}
';
}

function get_calendar_data($ year,$ month){

$ query = $ this-> db-> select('date_cal,title,类型') - > from('reservations') - > like('date',$ year- $ month,'after') - > get
$ cal_data = array();

foreach($ query-> result()as $ row){
if($ row-> title =='GK'&& $ row-> type =='AM'){
$ cal_data [substr($ row-> date_cal,8,2)] ='< div class =gk_am>'。 $ row-> title。 ''。 $ row->类型。 '< / div>';
} else if($ row-> title =='GK'&& $ row-> type =='PM'){
$ cal_data [substr($ row-> date_cal,8,2)] ='< div class =gk_pm>'。 $ row-> title。 ''。 $ row->类型。 '< / div>';
} else if($ row-> title =='RP'&& $ row-> type =='AM'){
$ cal_data [substr($ row-> date_cal,8,2)] ='< div class =rp_am>'。 $ row-> title。 ''。 $ row->类型。 '< / div>';
} else if($ row-> title =='RP'&& $ row-> type =='PM'){
$ cal_data [substr($ row-> date_cal,8,2)] ='< div class =rp_pm>'。 $ row-> title。 ''。 $ row->类型。 '< / div>';
}
}



return $ cal_data;
}

函数generate($ year,$ month){


$ this-> load-> library $ this-> conf);

$ cal_data = $ this-> get_calendar_data($ year,$ month);

return $ this-> calendar-> generate($ year,$ month,$ cal_data);
}

}

?>


解决方案

如果要显示日期的所有四个框它有数据,尝试改变get_calendar_data()foreach如下,

  $ content =; 
$ lastDay = -1;
$ index = 0;
foreach($ query-> result()as $ row){

if($ lastDay!= intval(substr($ row-> date_cal,8,2))) {
if($ index> 0){
if($ content!=''){
$ cal_data [$ lastDay] = $ content;
$ content ='';
}
}
$ index = 0;
}


if($ row-> title =='GK'&& $ row-> type =='AM'){
$ content。='< div class =gk_am>'。 $ row-> title。 ''。 $ row->类型。 '< / div>';
} else if($ row-> title =='GK'&& $ row-> type =='PM'){
$ content。='< div class = gk_pm>'。 $ row-> title。 ''。 $ row->类型。 '< / div>';
} else if($ row-> title =='RP'&& $ row-> type =='AM'){
$ content. ='< div class = rp_am>'。 $ row->标题。 ''。 $ row->类型。 '< / div>';
} else if($ row-> title =='RP'&& $ row-> type =='PM'){
$ content。='< div class = rp_pm>'。 $ row-> title。 ''。 $ row->类型。 '< / div>';
}

$ lastDay = intval(substr($ row-> date_cal,8,2));
$ index ++;

}

if($ lastDay!= -1& $ content!=''){
$ cal_data [$ lastDay] = $ content ;
}

让我知道它是否现在工作。


I am creating a calendar without jquery calendar plugin. I could retrieve the data which is in the database to the calendar. But when there are multiple data per day only one data comes to the calendar view. I want it to be like this when there is multiple data.

But what i am getting is this when there are multiple data

the day 16 has every four data.but it shows only one. If anyone has an idea about this it would be help me.

following are my code

Controller

<?php

class My_calendar extends CI_Controller {

    public function index($year = null, $month = null) {
        echo "My calendar project";
        $this->showcal($year, $month);
    }

    public function showcal($year = null, $month = null) {
        $this->load->model('mycal_model');
        $data['calendar'] = $this->mycal_model->generate($year, $month);

        $this->load->view('mycal', $data);
    }

}

View

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Welcome to CodeIgniter</title>

        <style type="text/css">



            #body{
                margin: 0 15px 0 15px;
            }



            #container{
                margin: 10px;
                border: 1px solid #D0D0D0;
                -webkit-box-shadow: 0 0 8px #D0D0D0;
            }


            .calendar{
                /*           background-color: yellow;*/
            }
            table.calendar{
                margin: auto;
                border-collapse: collapse;
            }
            .calendar .days td {
                width:80px;
                height: 90px;
                padding: 4px;
                border:  1px solid #999;
                vertical-align:  top;
                background-color: #DEF;

            }
            .calendar .days td:hover{
                background-color: #fff;
            }
            .calendar .highlight {
                font-weight: bold;
                color: #EF1BAC;
            }
            .calendar .content .gk_am{
                float: left;
                display: inline-block;
                width: 40px;
                background-color: #D0D0D0;
            }
            .calendar .content .gk_pm{
                float: right;
                display: inline-block;
                width: 40px;
                background-color: red;
            }

            .calendar .content .rp_am{
                float: left;
                display: inline-block;
                width: 40px;
                background-color: gray;
            }

            .calendar .content .rp_pm{
                float: right;
                display: inline-block;
                width: 40px;
                background-color: #D893A1;
            }
        </style>
    </head>
    <body>

        <div id="container">

            <div id="body">
                <?PHP echo $calendar; ?>

            </div>


        </div>

    </body>
</html>

Model

<?php

class mycal_model extends CI_Model {

    function __construct() {
        parent::__construct();
        $this->mycal_model();
    }

    function mycal_model() {

        $this->conf = array(
            'show_next_prev' => True,
            'next_prev_url' => base_url() . 'index.php/my_calendar/index/'
        );

        $this->conf['template'] = '
            {table_open}<table cellpadding="1" cellspacing="2" class="calendar">{/table_open}

            {heading_row_start}<tr>{/heading_row_start}

            {heading_previous_cell}<th class="prev_sign"><a href="{previous_url}">&lt;&lt;</a></th>{/heading_previous_cell}
            {heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell}
            {heading_next_cell}<th class="next_sign"><a href="{next_url}">&gt;&gt;</a></th>{/heading_next_cell}

            {heading_row_end}</tr>{/heading_row_end}

            //Deciding where to week row start
            {week_row_start}<tr class="week_name" >{/week_row_start}
            //Deciding  week day cell and  week days
            {week_day_cell}<td >{week_day}</td>{/week_day_cell}
            //week row end
            {week_row_end}</tr>{/week_row_end}

            {cal_row_start}<tr class= "days">{/cal_row_start}
            {cal_cell_start}<td>{/cal_cell_start}

            {cal_cell_content}
                <div class="day_num">{day}
                </div>
                <div class= "content">{content}
                </div>
            {/cal_cell_content}

            {cal_cell_content_today}
            <div class="day_num highlight">{day}</div>
             <div class= "content">{content}</div>
            {/cal_cell_content_today}

            {cal_cell_no_content}<div class="day_num">{day}</div>{/cal_cell_no_content}
            {cal_cell_no_content_today}<div class="day_num highlight">{day}</div>{/cal_cell_no_content_today}

            {cal_cell_blank}&nbsp;{/cal_cell_blank}

            {cal_cell_end}</td>{/cal_cell_end}
            {cal_row_end}</tr>{/cal_row_end}

            {table_close}</table>{/table_close}
            ';
    }

    function get_calendar_data($year, $month) {

        $query = $this->db->select('date_cal,title,type')->from('reservations')->like('date', "$year-$month", 'after')->get();
        $cal_data = array();

        foreach ($query->result() as $row) {
            if ($row->title == 'GK' && $row->type == 'AM') {
                $cal_data[substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'GK' && $row->type == 'PM') {
                $cal_data[substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'RP' && $row->type == 'AM') {
                $cal_data[substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'RP' && $row->type == 'PM') {
                $cal_data[substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
            }
        }



        return $cal_data;
    }

    function generate($year, $month) {


        $this->load->library('calendar', $this->conf);

        $cal_data = $this->get_calendar_data($year, $month);

        return $this->calendar->generate($year, $month, $cal_data);
    }

}

?>

解决方案

If you want to show all four boxes for the dates which has data, try to change the get_calendar_data() foreach as below,

$content = "";
$lastDay = -1;
$index = 0;
foreach ($query->result() as $row) {

        if($lastDay != intval(substr($row->date_cal, 8, 2))){       
            if($index > 0 ){
               if($content != ''){
                   $cal_data[$lastDay] = $content;
                   $content = '';
               }
            }
            $index = 0;               
        }


        if ($row->title == 'GK' && $row->type == 'AM') {
            $content .= '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
        } else if ($row->title == 'GK' && $row->type == 'PM') {
            $content .= '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
        }else if ($row->title == 'RP' && $row->type == 'AM') {
            $content .= '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';                
        } else if ($row->title == 'RP' && $row->type == 'PM') {
            $content .= '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';                
        }

        $lastDay = intval(substr($row->date_cal, 8, 2));
        $index++;     

    }

    if($lastDay != -1 && $content != ''){
        $cal_data[$lastDay] = $content;
    }

Let me know whether it works now or not.

这篇关于如何修改CodeIgniter日历以处理每天多个事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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