Risolto Ora
ho dovuto creare due tabelle e quindi sulla funzione modello aggiunto questa linea
$calendar[$event['day']] = '<br/>' . $event['event'];
Qui di seguito prima foreach per l'evento principale e quindi qualsiasi altro in più gli eventi usano il secondo foreach con la chiave dell'array esistente.
Questo ora consente anche di controllare quante righe vengono ora visualizzate nel ciclo foreach di eventi extra .
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;
}
Calendario Modello
<?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();
}
}
Calendario 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} {/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');
}
}
}
limitare solo la funzione foreach in get_events (funzione). È possibile limitare foreach utilizzando la variabile di iterazione come $ i = 0; ed eseguire foreach mentre $ i <1; Spero che funzionerà per voi. –
@ AliShan potresti mostrarlo per favore con il mio codice. – user4419336
@ wolfgang1983 hey puoi chiarire un po 'di più con quello che ti aspettavi. così come aggiungere 'print_r ($ query-> result_array())' risultato anche –