如果它在某个地方,我讨厌重新发明轮子,但是是否有人扩展或修改了codigniter日历来处理多天事件和每天多个事件,或者是否有一个可用的模块?
一天多做几件事其实很容易。它只需要改变日历模板,这里是我的一些代码的例子。
public function print_calendar($year = 0, $month = 0)
{
$prefs = array (
'show_next_prev' => FALSE,
'next_prev_url' => site_url('events/print_calendar'),
'day_type' => 'long',
'template' => '
{heading_row_start}{/heading_row_start}
{heading_previous_cell}{/heading_previous_cell}
{heading_title_cell}<h1>{heading}</h1>{/heading_title_cell}
{heading_next_cell}{/heading_next_cell}
{heading_row_end}{/heading_row_end}
{table_open}<table border="0" cellpadding="0" cellspacing="0">{/table_open}
{week_row_start}<tr>{/week_row_start}
{week_day_cell}<th bgcolor="#999999">{week_day}</th>{/week_day_cell}
{week_row_end}</tr>{/week_row_end}
{cal_row_start}<tr>{/cal_row_start}
{cal_cell_start}<td background="'.s3_path('images/print_cal_cell.jpg').'">{/cal_cell_start}
{cal_cell_content}<span class="cal_day">{day}</span>{content}{/cal_cell_content}
{cal_cell_content_today}<span class="cal_day">{day}</span>{/cal_cell_content_today}
{cal_cell_no_content}<span class="cal_day">{day}</span>{/cal_cell_no_content}
{cal_cell_no_content_today}<span class="cal_day">{day}</span>{/cal_cell_no_content_today}
{cal_cell_blank} {/cal_cell_blank}
{cal_cell_end}</td>{/cal_cell_end}
{cal_row_end}</tr>{/cal_row_end}
{table_close}</table>{/table_close}
'
);
$this->load->library('calendar', $prefs);
$year = ($year == 0) ? date('Y') : $year;
$month = ($month == 0) ? date('n') : $month;
$start = strtotime('1-'.$month.'-'.$year);
$events = $this->events_model->get_by_date($start, strtotime('+1 month', $start));
$this->template->set_layout('');
if ($events)
{
foreach ($events as $key => $event)
{
$day = date('j', $event['showing_start_time']);
$vars[$day] = $this->template->build('events/calendar/cal_item', $event, TRUE);
}
}
$vars['content'] = $this->calendar->generate($year, $month, $vars);
$this->load->view('calendar/cal_layout', $vars);
}
希望代码是清晰的,可以给你一个好的起点。我通常做的是,如果它们跨越了好几天,我就把它们放在每一天。
这可以在system/libraries/Calendar.php
文件中通过添加以下代码轻松修改。我知道编辑任何系统文件都被认为是禁忌,但这在我的应用程序中帮了我很大的忙。注意注释部分的foreach()
循环,上面写着//If more than one event on the same day.
。这是需要添加到Calendar.php库文件中的代码。此资源可以在以下链接中进一步详细说明。
http://codeigniter.com/forums/viewthread/196998/
Calendar.php修改代码:
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 more than one event on the same day
if (is_array($data[$day]))
{
$several_events = '';
foreach ($data[$day] as $key => $value)
{
$several_events .= '<li id="'.$key.'">'.$value.'</li>';
}
$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);
}
}
else
{
// Blank cells
$out .= $this->temp['cal_cell_blank'];
}
请记住,我展示的不仅仅是上面编辑的代码,以帮助您在Calendar.php
中找到它。我希望这对你有帮助!