Календарь c несколькими событиями в один день на CodeIgniter (Calendar Multiple Events Per Day)

Календарь c несколькими событиями в один день на CodeIgniter (Calendar Multiple Events Per Day) Частенько требуется организовать календарь с возможностью показа нескольких событий в один день. Посмотрим как это можно сделать на CodeIgniter.

Календарь основывается на показанном в уроках nettuts календаре на CodeIgniter: Nettuts Codeignitter Calendar

Шаг 1) make sure the nettuts way of calendar work on you.

Шаг 2) copy the calendar.php from system/libraries to application/libraries

Шаг 3) make an adjustment in the calendar.php library in line 217 and put the code below (Thanks to member zoltano):

if (isset($data[$day]))
{
    // Cells with content
    $temp = ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_content_today'] : $this->temp['cal_cell_content'];
    if (is_array($data[$day]))
    {
        $several_events = '';
        foreach ($data[$day] as $key)
        {
            $several_events .= $key.'<br />';
        }
        $out .= str_replace('{day}', $day, str_replace('{content}', $several_events, $temp));
    }

    // One event per day
    else
    {
        $out .= str_replace('{day}', $day, str_replace('{content}', $data[$day], $temp));
    }
}
else
{
    // Cells with no content
    $temp = ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_no_content_today'] : $this->temp['cal_cell_no_content'];
    $out .= str_replace('{day}', $day, $temp);
}	

Шаг 4) now on the calendar model you must make your output array. The code you must put on the get_calendar_data function of the model is shown below:

function get_calendar_data($year, $month) 
{
	        $query = $this->db->query("SELECT DISTINCT DATE_FORMAT(date, '%Y-%m-%e') AS date
	                                            FROM calendar
	                                            WHERE date LIKE '$year-$month%' "); //date format eliminates zeros make
	                                                                           //days look 05 to 5
	  
	                $cal_data = array();
	               
	                foreach ($query->result() as $row) { //for every date fetch data
	                    $a = array();
	                    $i = 0;
	                    $query2 = $this->db->query("SELECT data
	                                                FROM calendar
	                                                WHERE date LIKE DATE_FORMAT('$row->date', '%Y-%m-%d') ");
	                                                            //date format change back the date format
	                                                            //that fetched earlier
	                     foreach ($query2->result() as $r) {
	                         $a[$i] = $r->data;     //make data array to put to specific date
	                         $i++;                         
	                     }
	                        $cal_data[substr($row->date,8,2)] = $a;
	                    
	                }
	                return $cal_data;
} 
Это всё !!

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.