2017-02-22 17 views
2

EDIT: Диапазон теперь правильно структурирован как массив, а даты и времена теперь отформатированы как ISO8601. К сожалению, same error message on console with hasTime.FullCalendar повторяет события mysql еженедельно на заданное время


Я пытаюсь сделать школьный график, используя FullCalendar, загружая каждый урок из базы данных с помощью PHP для кодирования в формат JSON.

Я стараюсь показывать каждый урок, повторяющийся еженедельно, по расписанию только в сроки семестра (2016/09/26 - 2016/12/16). Этот диапазон может отличаться для других уроков.

Ниже выход EventListRecurring.php

[{ 
    "id": "1", 
    "title": "History", 
    "start": "09:00", 
    "end": "10:00", 
    "dow": "1", 
    "ranges": [{ 
     "start": "2016-09-26", 
     "end": "2016-12-16" 
    }], 
    "allDay": false 
}, { 
    "id": "2", 
    "title": "English", 
    "start": "10:00", 
    "end": "12:00", 
    "dow": "2", 
    "ranges": [{ 
     "start": "2016-09-26", 
     "end": "2016-12-16" 
    }], 
    "allDay": false 
}, { 
    "id": "3", 
    "title": "Geography", 
    "start": "14:00", 
    "end": "16:00", 
    "dow": "3", 
    "ranges": [{ 
     "start": "2016-09-26", 
     "end": "2016-12-16" 
    }], 
    "allDay": false 
}] 

Я попытался с помощью slicedtoads solution со следующим Javascript, но нет никаких событий календаря и получать только получить this error

CalendarTimetableRecurring

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title></title> 
<meta charset="utf-8"> 
<link rel='stylesheet' href='fullcalendar/fullcalendar.min.css' /> 
<script src='fullcalendar/lib/jquery.min.js'></script> 
<script src='fullcalendar/lib/moment.min.js'></script> 
<script src='fullcalendar/fullcalendar.js'></script> 
</head> 
<body> 
<h1>Reapeating Events Example </h1> 
<div id='calendar'></div> 

<script type="text/javascript"> 
var repeatingEvents = 
    'EventListRecurring.php' 

var getEvents = function(start, end){ 
    return repeatingEvents; 
} 

$('#calendar').fullCalendar({ 
    defaultDate: moment(), 
    header: { 
     left: 'prev,next today', 
     center: 'title', 
     right: 'month,agendaWeek,agendaDay' 
    }, 
    defaultView: 'month', 
    eventRender: function(event, element, view){ 
     console.log(event.start.format()); 
     return (event.ranges.filter(function(range){ 
      return (event.start.isBefore(range.end) && 
        event.end.isAfter(range.start)); 
     }).length)>0; 
    }, 
    events: function(start, end, timezone, callback){ 
     var events = getEvents(start,end); 

     callback(events); 
    }, 
}); 


</script> 
</body> 
</html> 

EventListRecurring.php

<?php 

$record[0]["title"]="History"; 
$record[1]["title"]="English"; 
$record[2]["title"]="Geography"; 

$record[0]["start_time"]="09:00"; 
$record[1]["start_time"]="10:00"; 
$record[2]["start_time"]="14:00"; 

$record[0]["end_time"]="10:00"; 
$record[1]["end_time"]="12:00"; 
$record[2]["end_time"]="16:00"; 

$record[0]["dow"]="1"; 
$record[1]["dow"]="2"; 
$record[2]["dow"]="3"; 

$record[0]["start_date"]="2016-09-26"; 
$record[1]["start_date"]="2016-09-26"; 
$record[2]["start_date"]="2016-09-26"; 

$record[0]["end_date"]="2016-12-16"; 
$record[1]["end_date"]="2016-12-16"; 
$record[2]["end_date"]="2016-12-16"; 

$record[0]["id"]="1"; 
$record[1]["id"]="2"; 
$record[2]["id"]="3"; 

for ($i=0; $i<3; $i++) { 

    $event_array[] = array(
      'id' => $record[$i]['id'], 
      'title' => $record[$i]['title'], 
      'start' => $record[$i]['start_time'], 
      'end' => $record[$i]['end_time'], 
      'dow' => $record[$i]['dow'], 
      'ranges' => array(
       0 => array(
        'start' => $record[$i]['start_date'], 
        'end' => $record[$i]['end_date'], 
       ) 
      ), 
      'allDay' => false 

    ); 


} 

echo json_encode($event_array); 


exit; 

?> 
+0

в вашем EventListRecurring.php ваше конечное время кажется неуместным, попробуйте добавить время, как в начале. –

+0

опечатка с датой окончания и временем окончания в скрипте php. Исправлено, но проблема все та же. Я обновил код и включил скриншот сообщения об ошибке консоли. – Michael

ответ

1

Ваша собственность «диапазоны» не структурирован таким же образом, как и в решении вы связаны. Вы возвращающая один объект, а не массив:

"ranges": { 
    "start": "2016-09-26", 
    "end": "2016-12-16" 
} 

должен быть

"ranges": [{ 
    "start": "2016-09-26", 
    "end": "2016-12-16" 
}] 

После того, как вы это исправить, ваш код, кажется, прекрасно работать и работать, как ожидалось.

Вы можете изменить свой PHP следующим образом, чтобы создать такую ​​структуру:

'ranges' => array(
    0 => array(
     'start' => $record[$i]['start_date'], 
     'end' => $record[$i]['end_date'], 
    ) 
) 

И наконец, изменить свое определение источника данных:

events: "EventListRecurring.php" 

, как вы делаете это сейчас, с пользовательский источник данных, не нужен, потому что вы не манипулируете данными, а также не будете работать, потому что вам придется обрабатывать вызов ajax самостоятельно - в настоящее время он просто возвращает строку, содержащую имя вашего PHP-скрипта. На самом деле это не вызов этого скрипта.

+0

Я добавил свой EventListRecurring.php выше. 'диапазоны' => Array ( 'Start' => $ запись [$ я] [ 'start_date'], 'End' => $ запись [$ я] [ 'дата_окончания'], ), Это моя ошибка? – Michael

+0

Да, это проблема. Вы выводите только один объект (хотя вы определили массив, json_encode сделает его объектом, потому что он имеет несекретные индексы). То, что вы хотите, находится в массиве внутри объекта.Для этого вам нужен внешний массив с одним числовым индексом (поэтому он выводится как массив в JSON), который содержит массив, который образует один объект «диапазона». Отредактировал ответ, чтобы дать вам пример (не тестировался, но, надеюсь, работает, вы получаете идею и т. Д.!) – ADyson

+0

Спасибо за помощь. К сожалению, такая же ошибка «не может прочитать свойство hasTime» неопределенного «Я обновил код с диапазоном корректно, как массив и даты/время в формате ISO8601. – Michael