php - Codeigniter 日历不显示正确的数据并且设置限制不起作用

标签 php codeigniter

我正在使用 CodeIgniter Calendar图书馆。

我有两个表,我从数据库中获取日历数据。

  1. 事件表
  2. extra_events 表

问题我有 2 个 foreach 循环和第二个 foreach 循环 $query2->result_array()它不允许我每天从数据库表 extra_events 中获取第一个事件我也在尝试能够从额外事件表中设置限制但不起作用。

来自extra_events表格

例子

Test 2 | Example 2
       | Example 3

它应该产生

Test 1 | Example 1 <!-- Missing
Test 2 | Example 2
       | Example 3

Question how can I make sure I get all the results correct for $query2->result_array().

图片

enter image description here

获取函数

public function get_events($year, $month) {
        $calendar = array();

        $this->db->select('*');
        $this->db->from('events');
        $this->db->where('year', $year);
        $this->db->where('month', $month);
        $query1 = $this->db->get();

        foreach ($query1->result_array() as $event) {

            $this->db->select('*');
            $this->db->from('extra_events');
            $this->db->where('events_id', $event['events_id']);
            $this->db->where('year', $year);
            $this->db->where('month', $month);
            //$this->db->limit(2);
            $query2 = $this->db->get();

            foreach ($query2->result_array() as $result) {

                if (array_key_exists($event['day'], $calendar)) {

                    $calendar[$event['day']] =  $calendar[$event['day']]  . '<br/>' . $result['event'];

                } else {

                    $calendar[$event['day']] = '<br/><b>From Events Table</b> <i class="fa fa-long-arrow-down"></i><br/>' . $event['event'] . '<hr><b>From Extra Events Table</b> <i class="fa fa-long-arrow-down"></i>' ;

                }

            }
        }

        return $calendar;

    }

数据库

enter image description here

enter image description here

最佳答案

已解决

我必须创建两个表,然后在模型函数上添加这一行

$calendar[$event['day']] = '<br/>' . $event['event'];

下面是主要事件的第一个 foreach,然后任何其他额外事件使用第二个 foreach 并存在数组键。

This now also lets me control how many rows are now displayed in extra events foreach loop.

public function get_calendar_events($year, $month) {
        $calendar = array();

        $events = $this->get_events($year, $month);

        foreach($events as $event) {

            // Added line for main calendar event
            $calendar[$event['day']] = '<br/>' . $event['event'];

            // Passes main event id to extra_events get function
            $extra_events = $this->get_extra_events($event['events_id']);

            // checks if array key exists for extra event in side foreach loop
            foreach($extra_events as $extra_event) {
                if (array_key_exists($extra_event['day'], $calendar)) {
                    $calendar[$extra_event['day']] = $calendar[$extra_event['day']] . '<br/>' .  $extra_event['event'];
                } else {
                    $calendar[$extra_event['day']] =  $extra_event['event'];
                }
            }
        }


        return $calendar;
    }

日历模型

<?php

class Model_calendar extends CI_Model {

    public function add_event() {
        $data = array(
            'year' => $this->input->post('year'),
            'month' => ($this->input->post('month') > 10) ? $this->input->post('month') : '0' . $this->input->post('month'),
            'day' => $this->input->post('day'),
            'date' => $this->input->post('year') .'-'. $this->input->post('month') .'-'. $this->input->post('day'),
            'event' => $this->input->post('event'),
            'date_added' => mdate('%Y-%m-%d %H:%i:%s', now())
       );

       $this->db->insert($this->db->dbprefix . 'events', $data);
    }

    public function add_extra_event() {
        $data = array(
            'events_id' => (int)$this->get_event_id(),
            'year' => $this->input->post('year'),
            'month' => ($this->input->post('month') > 10) ? $this->input->post('month') : '0' . $this->input->post('month'),
            'day' => $this->input->post('day'),
            'date' => $this->input->post('year') .'-'. $this->input->post('month') .'-'. $this->input->post('day'),
            'event' => $this->input->post('event'),
            'date_added' => mdate('%Y-%m-%d %H:%i:%s', now())
        );

        $this->db->insert($this->db->dbprefix . 'extra_events', $data);
    }

    public function get_event_id() {
        $this->db->where('year', $this->input->post('year'));
        $this->db->where('month', ($this->input->post('month') > 10) ? $this->input->post('month') : '0' . $this->input->post('month'));
        $this->db->where('day', $this->input->post('day'));

        $query = $this->db->get($this->db->dbprefix . 'events');

        if ($query->num_rows() > 0) {
            $row = $query->row();
            return $row->events_id;
        } else {
            return false;
        }
    }

     public function check_event() {
        $this->db->where('year', $this->input->post('year'));
        $this->db->where('month', ($this->input->post('month') > 10) ? $this->input->post('month') : '0' . $this->input->post('month'));
        $this->db->where('day', $this->input->post('day'));
        $query = $this->db->get($this->db->dbprefix . 'events');

        if ($query->num_rows() > 0) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    public function delete_events() {
        $this->db->where("date <", date('Y-m-d'));
        $this->db->delete($this->db->dbprefix . 'events');
    }

    public function delete_extra_events() {
        $this->db->where("date <", date('Y-m-d'));
        $this->db->delete($this->db->dbprefix . 'extra_events');
    }

    public function get_calendar_events($year, $month) {
        $calendar = array();

        $events = $this->get_events($year, $month);

        foreach($events as $event) {

            $calendar[$event['day']] = '<br/>' . $event['event'];

            $extra_events = $this->get_extra_events($event['events_id']);

            foreach($extra_events as $extra_event) {
                if (array_key_exists($extra_event['day'], $calendar)) {
                    $calendar[$extra_event['day']] = $calendar[$extra_event['day']] . '<br/>' .  $extra_event['event'];
                } else {
                    $calendar[$extra_event['day']] =  $extra_event['event'];
                }
            }
        }


        return $calendar;
    }

    public function get_events($year, $month) {
        $this->db->where('year', $year);
        $this->db->where('month', $month);
        $events = $this->db->get($this->db->dbprefix . 'events');
        return $events->result_array();
    }

    public function get_extra_events($events_id) {
        $this->db->limit(5);
        $this->db->where('events_id', $events_id);
        $extra_events = $this->db->get($this->db->dbprefix . 'extra_events');
        return $extra_events->result_array();
    }
}

日历 Controller

<?php

class Calendar extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('dashboard/model_calendar');
        $this->load->library('calendar');
        $this->load->library('form_validation');

    }

    public function index() {    
        if ($this->uri->segment(3) == FALSE) {
            $year = date('Y');
        } else {
            $year = $this->uri->segment(3);
        }

        if ($this->uri->segment(4) == FALSE) {
            $month = date('m');
        } else {
            $month = $this->uri->segment(4);
        }

        $prefs = array(
            'start_day' => 'monday',
            'show_next_prev' => true,
            'month_type'   => 'long',
            '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-hover 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 class="text-center" style="height: 5rem;">{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: 0;">{content}</div>
            {/cal_cell_content}
            {cal_cell_content_today}
                <div class="day_number highlight">{day}</div>
                <div class="content" style="margin-top: 0;">{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_events();

        $this->model_calendar->delete_extra_events();

        $events = $this->model_calendar->get_calendar_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->form_validation->set_rules('event', 'Calendar Event', 'trim|required');

        if ($this->form_validation->run() == FALSE) {

            $this->load->view('dashboard/calender_view', $data);

        } else {

            if ($this->model_calendar->check_event() == TRUE) {

                $this->model_calendar->add_extra_event();

            } else {

                $this->model_calendar->add_event();

            }

            $this->session->set_flashdata('added_event', '<i class="fa fa-check-circle"></i> You have added event to your calendar!');

            redirect('common/dashboard');

        }
    }
} 

关于php - Codeigniter 日历不显示正确的数据并且设置限制不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34466664/

相关文章:

php - 如何检查 Mysql 行中的文本?

php - 应用程序引擎更新破坏了 dev php env 中的 CloudStorage

php - 测试 PHP_SAPI! ='cli' phpunit 代码

php - 从循环中获取元素的 ID

regex - RewriteCond REQUEST_URI - ^ 没有按预期工作

php - 使用 PDO 从查询创建多维数组

在同一脚本标记中编写另一个方法后,Javascript 方法停止工作

php - 如何在 mysql + codeigniter 中按开始时间/结束时间过滤记录

php - 尽管代码相同,但在一台服务器上出现 SQL 错误,但在另一台服务器上却没有

mysql - CodeIgniter MySQL 一次更新多个表 db->update() db->where()