我目前正在开发codeIgniter 3日历库,我可以在每个月的每一天向数据库添加新的信息行
如果一天有2行插入,我应该能够看到当天的两个日历事件。
2015-12-25必须如图所示行。
我希望能够展示而不仅仅展示一个活动,而是展示当天的活动。
问题:我如何让get_calendar_data函数能够获取日历当天的行。目前在2015-12-25它只显示一行。
获取数据功能
public function get_calendar_data($year, $month) {
$cell_data = array();
$query = $this->db->get('calendar');
if ($query->num_rows() > 0) {
$row = $query->row();
$this->db->select('*');
$this->db->from('calendar');
$this->db->where('year', $year);
$this->db->where('month', $month);
$this->db->where('day', $row->day);
$query = $this->db->get();
foreach ($query->result() as $result) {
$cell_data[$result->day] = $result->data;
}
return $cell_data;
}
}
控制器
<?php
class Calendar extends MX_Controller {
public function __construct() {
parent::__construct();
$this->load->model('dashboard/model_calendar');
$this->load->library('calendar');
}
public function index() {
if ($this->uri->segment(3) == FALSE) {
$year = date('Y');
} else {
$year = $this->uri->segment(3);
}
$data['year'] = $year;
if ($this->uri->segment(4) == FALSE) {
$month = date('m');
} else {
$month = $this->uri->segment(4);
}
$data['month'] = $month;
$prefs = array(
'start_day' => 'monday',
'show_next_prev' => true,
'day_type' => 'long',
'next_prev_url' => base_url('dashboard/calendar')
);
$prefs['template'] = '
{table_open}<div class="table-responsive"><table border="0" cellpadding="0" cellspacing="0" class="table table-striped table-bordered calendar">{/table_open}
{heading_row_start}<tr>{/heading_row_start}
{heading_previous_cell}<th><a href="{previous_url}"><i class="fa fa-chevron-left fa-2x "></i></a></th>{/heading_previous_cell}
{heading_title_cell}<th class="text-center" colspan="{colspan}">{heading}</th>{/heading_title_cell}
{heading_next_cell}<th class="text-right"><a href="{next_url}"><i class="fa fa-chevron-right fa-2x"></i></a></th>{/heading_next_cell}
{heading_row_end}</tr>{/heading_row_end}
{week_row_start}<tr>{/week_row_start}
{week_day_cell}<td>{week_day}</td>{/week_day_cell}
{week_row_end}</tr>{/week_row_end}
{cal_row_start}<tr class="days">{/cal_row_start}
{cal_cell_start}<td class="day">{/cal_cell_start}
{cal_cell_content}
<div class="day_number">{day}</div>
<div class="content" style="margin-top: 10px;">{content}</div>
{/cal_cell_content}
{cal_cell_content_today}
<div class="day_number highlight">{day}</div>
<div class="content" style="margin-top: 10px;">{content}</div>
{/cal_cell_content_today}
{cal_cell_no_content}
<div class="day_number">{day}</div>
{/cal_cell_no_content}
{cal_cell_no_content_today}
<div class="day_number highlight">{day}</div>
{/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></div>{/table_close}
';
$this->calendar->initialize($prefs);
$this->delete_calendar_event();
if ($this->input->post('day')) {
//if ($this->check_calendar_event($year, $month, $this->input->post('day'))) {
// $this->update_calendar_event($year, $month);
//} else {
$this->add_calendar_event($year, $month);
//}
}
$data = $this->get_calendar_data($year, $month);
$data['calendar'] = $this->calendar->generate($year, $month, $data);
if ($this->uri->segment(3) == TRUE) {
$data['view_more'] = site_url('report/events/'. $year .'/'. $month);
} else {
$data['view_more'] = site_url('report/events');
}
$date = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 3, date('Y')));
//echo $date;
// echo '<br/>';
//echo $this->test();
$this->load->view('dashboard/calender_view', $data);
}
public function test() {
$date = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 3, date('Y')));
$this->db->where('date <', $date);
$query = $this->db->get('calendar');
return $query->num_rows();
}
public function add_calendar_event($year, $month) {
$date = $year .'-'. $month .'-'. $this->input->post('day');
$calendar = array(
'year' => $year,
'month' => $month,
'day' => $this->input->post('day', TRUE),
'date' => $date,
'data' => $this->input->post('event_data')
);
$this->db->insert('calendar', $calendar);
}
public function update_calendar_event($year, $month) {
$date = $year .'-'. $month .'-'. $this->input->post('day');
$calendar = array(
'year' => $year,
'month' => $month,
'day' => $this->input->post('day', TRUE),
'data' => $this->input->post('event_data')
);
$this->db->where('date', $date);
$this->db->update('calendar', $calendar);
}
public function delete_calendar_event() {
$this->db->where("date <", date('Y-m-d'));
$this->db->or_where('data', '');
$this->db->delete('calendar');
}
public function get_calendar_data($year, $month) {
$cell_data = array();
$query = $this->db->get('calendar');
if ($query->num_rows() > 0) {
$row = $query->row();
$this->db->select('*');
$this->db->from('calendar');
$this->db->where('year', $year);
$this->db->where('month', $month);
$this->db->where('day', $row->day);
$query = $this->db->get();
foreach ($query->result() as $result) {
$cell_data[$result->day] = $result->data;
}
return $cell_data;
}
}
public function check_calendar_event($year, $month, $day) {
$date = $year .'-'. $month .'-'. $day;
$this->db->select('year, month, day');
$this->db->from('calendar');
$this->db->where('date', $date);
$results = $this->db->count_all_results();
return $results;
}
public function check_calendar_event_date() {
}
}
答案 0 :(得分:3)
经过很长一段时间搜索网页并尝试新事物后,我发现下面的代码函数 array_key_exists 让我每天都能获得多个事件。
public function get_events($year, $month) {
$calendar = array();
$this->db->where('year', $year);
$this->db->where('month', $month);
$query = $this->db->get('calendar');
$results = $query->result_array();
foreach ($results as $event) {
if (array_key_exists($event['day'], $calendar)) {
$calendar[$event['day']] = $calendar[$event['day']] .'<ul class="list-unstyled"><li>'. anchor(base_url() .'report/events/'. $year .'/'. $month .'/'. $event['calendar_id'], $event['data']) . '</li></ul>';
} else {
$calendar[$event['day']] = '<ul class="list-unstyled"><li>' . anchor(base_url() .'report/events/'. $year .'/'. $month .'/'. $event['calendar_id'], $event['data']) . '</li></ul>';
}
}
return $calendar;
}
这里显示的灰图像工作:
控制器
<?php
class Calendar extends MX_Controller {
public function __construct() {
parent::__construct();
$this->load->model('dashboard/model_calendar');
$this->load->library('calendar');
}
public function index() {
if ($this->uri->segment(3) == FALSE) {
$year = date('Y');
} else {
$year = $this->uri->segment(3);
}
$data['year'] = $year;
if ($this->uri->segment(4) == FALSE) {
$month = date('m');
} else {
$month = $this->uri->segment(4);
}
$data['month'] = $month;
$prefs = array(
'start_day' => 'monday',
'show_next_prev' => true,
'day_type' => 'long',
'next_prev_url' => base_url('dashboard/calendar')
);
$prefs['template'] = '
{table_open}<div class="table-responsive"><table border="0" cellpadding="0" cellspacing="0" class="table table-striped table-bordered calendar">{/table_open}
{heading_row_start}<tr>{/heading_row_start}
{heading_previous_cell}<th><a href="{previous_url}"><i class="fa fa-chevron-left fa-2x "></i></a></th>{/heading_previous_cell}
{heading_title_cell}<th class="text-center" colspan="{colspan}">{heading}</th>{/heading_title_cell}
{heading_next_cell}<th class="text-right"><a href="{next_url}"><i class="fa fa-chevron-right fa-2x"></i></a></th>{/heading_next_cell}
{heading_row_end}</tr>{/heading_row_end}
{week_row_start}<tr>{/week_row_start}
{week_day_cell}<td>{week_day}</td>{/week_day_cell}
{week_row_end}</tr>{/week_row_end}
{cal_row_start}<tr class="days">{/cal_row_start}
{cal_cell_start}<td class="day">{/cal_cell_start}
{cal_cell_content}
<div class="day_number">{day}</div>
<div class="content" style="margin-top: 10px;">{content}</div>
{/cal_cell_content}
{cal_cell_content_today}
<div class="day_number highlight">{day}</div>
<div class="content" style="margin-top: 10px;">{content}</div>
{/cal_cell_content_today}
{cal_cell_no_content}
<div class="day_number">{day}</div>
{/cal_cell_no_content}
{cal_cell_no_content_today}
<div class="day_number highlight">{day}</div>
{/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></div>{/table_close}
';
$this->calendar->initialize($prefs);
$this->model_calendar->delete_calendar_event($year, $month);
if ($this->input->post('day')) {
if ($this->model_calendar->check_calendar_event($year, $month, $this->input->post('day'))) {
$this->model_calendar->update_calendar_event($year, $month);
} else {
$this->vadd_calendar_event($year, $month);
}
}
$events = $this->model_calendar->get_events($year, $month);
$data['calendar'] = $this->calendar->generate($year, $month, $events);
if ($this->uri->segment(3) == TRUE) {
$data['view_more'] = site_url('report/events/'. $year .'/'. $month);
} else {
$data['view_more'] = site_url('report/events');
}
$this->load->view('dashboard/calender_view', $data);
}
}
模型
<?php
class Model_calendar extends CI_Model {
public function test() {
$date = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 3, date('Y')));
$this->db->where('date <', $date);
$query = $this->db->get('calendar');
return $query->num_rows();
}
public function add_calendar_event($year, $month) {
$date = $year .'-'. $month .'-'. $this->input->post('day');
$calendar = array(
'year' => $year,
'month' => $month,
'day' => $this->input->post('day', TRUE),
'date' => $date,
'data' => $this->input->post('event_data')
);
$this->db->insert('calendar', $calendar);
}
public function update_calendar_event($year, $month) {
$date = $year .'-'. $month .'-'. $this->input->post('day');
$calendar = array(
'year' => $year,
'month' => $month,
'day' => $this->input->post('day', TRUE),
'data' => $this->input->post('event_data')
);
$this->db->where('date', $date);
$this->db->update('calendar', $calendar);
}
public function delete_calendar_event() {
$this->db->where("date <", date('Y-m-d'));
$this->db->or_where('data', '');
$this->db->delete('calendar');
}
public function get_events($year, $month) {
$calendar = array();
$this->db->where('year', $year);
$this->db->where('month', $month);
$query = $this->db->get('calendar');
$results = $query->result_array();
foreach ($results as $event) {
if (array_key_exists( $event['day'], $calendar ) ) {
$calendar[$event['day']] = $calendar[$event['day']] .'<ul class="list-unstyled"><li>'. anchor(base_url() .'report/events/'. $year .'/'. $month .'/'. $event['calendar_id'], $event['data']) . '</li></ul>';
} else {
$calendar[$event['day']] = '<ul class="list-unstyled"><li>' . anchor(base_url() .'report/events/'. $year .'/'. $month .'/'. $event['calendar_id'], $event['data']) . '</li></ul>';
}
}
return $calendar;
}
public function check_calendar_event($year, $month, $day) {
$date = $year .'-'. $month .'-'. $day;
$this->db->select('year, month, day');
$this->db->from('calendar');
$this->db->where('date', $date);
$results = $this->db->count_all_results();
return $results;
}
public function check_calendar_event_date() {
}
}
答案 1 :(得分:0)
这是一个很好的答案,我试图修改 codeigniter 日历制作 MY_calendar ,但这要好得多。 我仍然没有添加事件的链接。
public function get_datos_calendario($year, $month)
{
$this->db->like('fecha', "$year-$month", 'after');
$query = $this->db->get('tareas');
$datos_calendario = array();
$results = $query->result_array();
foreach ($results as $event) {
$day = ltrim(substr($event['fecha'], 8, 2), '0');
if (array_key_exists( $day, $datos_calendario ) ) {
$datos_calendario[$day] = $datos_calendario[$day] .'<ul class="list-unstyled"><li>'. $event["descripcion"] . '</li></ul>';
} else {
$datos_calendario[$day] = '<ul class="list-unstyled"><li>' . $event["descripcion"] . '</li></ul>';
}
}