Php Codeigniter日历未显示正确的数据,设置的限制不起作用

Php Codeigniter日历未显示正确的数据,设置的限制不起作用,php,codeigniter,Php,Codeigniter,我正在使用CodeIgniter库 我有两个从数据库中获取日历数据的表 事件表 额外事件表 问题是,我有两个foreach循环,第二个foreach循环$query2->result\u array()它不允许我从数据库表extra\u events中获取每天的第一个事件,我还试图从extra events表中设置限制,但不起作用 从extra_events表 范例 Test 2 | Example 2 | Example 3 它应该产生 Test 1 | Example 1 &

我正在使用CodeIgniter库

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

  • 事件表
  • 额外事件表
  • 问题是,我有两个foreach循环,第二个foreach循环
    $query2->result\u array()
    它不允许我从数据库表
    extra\u events
    中获取每天的第一个事件,我还试图从extra events表中设置限制,但不起作用

    extra_events

    范例

    Test 2 | Example 2
           | Example 3
    
    它应该产生

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

    test1 |示例1您可以将foreach限制为仅获取2个事件

    限制get_events()函数中的foreach循环

    public function get_events($year, $month) {
            $calendar = array();
    
            $this->db->where('year', $year);
            $this->db->where('month', $month);
            $query = $this->db->get('events');
    
            $results = $query->result_array();
    
            $i = 0;
            foreach ($results as $event) {
                if ($i < 2) {     // getting / fetching / extracting value from foreach for 2 times only
                    if (array_key_exists($event['day'], $calendar)) {
    
                        $calendar[$event['day']] = $calendar[$event['day']] . '
                    <hr/>
    
                    <div class="text-center">
                    <span class="label label-info">New</span>
                    </div>
                    <br/>
                    <div class="clearfix">
                    <div class="pull-left">
                    <ul class="list-unstyled text-center">
                    <li >'
                                . word_limiter(anchor(base_url('report/events/' . $year . '/' . $month . '/?event_id=' . $event['events_id']), $event['event']), 4) . '
                    </li>
                    </ul>
                    </div>
                    <div class="pull-right">
                    <form id="form-event" action="' . base_url('dashboard/calendar') . '" class="form-inline" method="post" enctype="multipart/form-data" onsubmit="return confirm(\'Are you sure you want to remove this!\')";>
                    <input type="hidden" name="delete_id" value="' . $event['events_id'] . '">
                    <a href="' . base_url('report/events/edit' . '/?event_id=' . $event['events_id']) . '" role="button" class="btn btn-primary"><i class="fa fa-pencil"></i></a>
                    <button type"submit" class="btn btn-danger"><i class="fa fa-trash"></i></button>
                    </form>
                    </div>
                    </div>';
                    } else {
    
                        $calendar[$event['day']] = '
                    <div class="text-center">
                    <span class="label label-info">New</span>
                    </div>
                    <br/>
                    <div class="clearfix">
                    <div class="pull-left">
                    <ul class="list-unstyled text-center">
                    <li >'
                                . word_limiter(anchor(base_url('report/events/' . $year . '/' . $month . '/?event_id=' . $event['events_id']), $event['event']), 4) . '
                    </li>
                    </ul>
                    </div>
                    <div class="pull-right">
                    <form id="form-event" action="' . base_url('dashboard/calendar') . '" class="form-inline" method="post" enctype="multipart/form-data" onsubmit="return confirm(\'Are you sure you want to remove this!\')";>
                    <input type="hidden" name="delete_id" value="' . $event['events_id'] . '">
                    <a href="' . base_url('report/events/edit' . '/?event_id=' . $event['events_id']) . '" role="button" class="btn btn-primary"><i class="fa fa-pencil"></i></a>
                    <button type"submit" class="btn btn-danger"><i class="fa fa-trash"></i></button>
                    </form>
                    </div>
                    </div>
                    ';
                    }
                    $i++;
                }
            }
    
            return $calendar;
        }
    
    公共函数获取事件($year,$month){
    $calendar=array();
    $this->db->where('year',$year);
    $this->db->where('month',$month);
    $query=$this->db->get('events');
    $results=$query->result_array();
    $i=0;
    foreach($results as$event){
    如果($i<2){//仅从foreach获取/获取/提取值2次
    如果(数组键存在($event['day',$calendar)){
    $calendar[$event['day']=$calendar[$event['day']].'
    
    新的
    • ' .word_limitor(锚定(基本url('report/events/'.$year./'.$month./'.$event.'./'.$id='.$event['events\u id']),$event['event']),4)。'
    '; }否则{ $calendar[$event['day']]=' 新的
    • ' .word_limitor(锚定(基本url('report/events/'.$year./'.$month./'.$event.'./'.$id='.$event['events\u id']),$event['event']),4)。'
    '; } $i++; } } 返回$calendar; }
    现在解决 我必须创建两个表,然后在模型函数中添加这一行

    $calendar[$event['day']]='
    '$事件[‘事件’]

    下面第一个foreach用于主事件,然后任何其他额外事件使用第二个foreach和数组键exists

    这现在也让我可以控制现在额外显示的行数 每个循环的事件

    公共函数获取日历事件($year,$month){
    $calendar=array();
    $events=$this->get_events($year,$month);
    foreach($events作为$event){
    //添加了主日历事件的行
    $calendar[$event['day']='
    '。$event['event']; //将主事件id传递给extra_events get函数 $extra_events=$this->get_extra_events($event['events\u id'); //检查side foreach循环中是否存在额外事件的数组键 foreach($extra\u事件作为$extra\u事件){ 如果(数组键存在($extra_event['day',$calendar)){ $calendar[$extra_event['day']]=$calendar[$extra_event['day'].
    。$extra_event['event']; }否则{ $calendar[$extra_event['day']]=$extra_event['event']; } } } 返回$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();
        }
    }
    

    只需在get_events()函数中限制foreach函数。您可以使用迭代变量$i=0来限制foreach;并在$i<1时运行foreach;我希望它能为你工作。@AliShan你能用我的代码显示它吗。@wolfgang1983嘿,你能用一个你所期望的再清楚一点吗。以及添加
    print\r($query->result\u array())
    resulttoo@Abdulla我已经更新了question@wolfgang1983你也可以发布这个数组输出吗
    $query1->result\u array()
    $query2->result\u array()
    不起作用,由于某些原因,现在只显示整个日历中的两个结果。在26天的日历上,如图所示,有3个日历应该显示2您可以通过Skype VuProjects与我联系14抱歉,目前无法联系。
    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();
        }
    }
    
    <?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');
    
            }
        }
    }