Codeigniter日历如何每天获得多个事件

时间:2015-12-19 06:21:50

标签: codeigniter codeigniter-3 codeigniter-hmvc

我目前正在开发codeIgniter 3日历库,我可以在每个月的每一天向数据库添加新的信息行

如果一天有2行插入,我应该能够看到当天的两个日历事件。

2015-12-25必须如图所示行。

我希望能够展示而不仅仅展示一个活动,而是展示当天的活动。

  

问题:我如何让get_calendar_data函数能够获取日历当天的行。目前在2015-12-25它只显示一行。

enter image description here

enter image description here

获取数据功能

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}&nbsp;{/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() {

    }
} 

2 个答案:

答案 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;
}

这里显示的灰图像工作:

enter image description here

控制器

<?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}&nbsp;{/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>';
        }
    }