Полный календарь не поддерживает повторяющиеся события из коробки. Вот что я сделал.
Когда я добавляю событие, у меня есть поле выбора для повторяющихся событий. Допустим, пользователь выбирает его повторять каждую неделю. Затем я вставляю событие в свою таблицу событий с родительским идентификатором, который будет одинаковым для всех экземпляров этого события.
Полный календарь позволяет повторяющимся событиям иметь одинаковый идентификатор события. Так что в моей таблице событий у меня есть уникальный столбец идентификатора события и родительский идентификатор, который я использую для отображения событий.
Так или иначе, сразу после вставки первого события я запускаю цикл, который выбирает последнее вставленное событие с тем же родительским идентификатором, добавляет к нему 7 дней и вставляет его в таблицу событий. Я повторяю этот процесс еще 50 раз, и затем у меня происходит событие, которое происходит каждую неделю в течение года.
Вот код:
Когда пользователь выбирает временной интервал, я открываю диалоговое окно
select: function(start, end){
$( "#add_class" ).dialog( "open" );
},
В диалоговом окне у меня есть выпадающий список
<div id="add_class" title="Add New Class">
<form action="">
<div id="recurring_event">
<label for = "recurring">Recurring </label>
<input type="checkbox" name="recurring" id="recurring" />
<div id = "recurring_options" >
Repeat every <select name = "repeat_frequency" id = "repeat_frequency">
<option value ="1">Day</option>
<option value="7" selected="selected">Week</option>
<option value = "28">Month</option>
</select>
</div>
</div>
</form>
</div>
Затем я отправляю эту информацию с помощью AJAX на страницу php с именем add_class.php
$( "#add_class" ).dialog({
"Save Class": function() {
var repeat_frequency = $("#repeat_frequency").val();
$.ajax({
type:"POST",
url: "add_class.php",
data: "repeat_frequency=" + repeat_frequency,
async: false,
});
$('#calendar').fullCalendar('refetchEvents');
$( this ).dialog( "close" );
},
Cancel: function() {
$( this ).dialog( "close" );
}
},
А вот и часть add_class.php, где я фактически ввожу ее в базу данных
$repeat_frequency = $_POST['repeat_frequency'];
$dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY);
$stmt = $dbh->prepare(
"INSERT INTO events (start, end) //whatever variables you received from the AJAX post on the dialog form
VALUES (:start, :end)");
$stmt->bindParam(':start', $start);
$stmt->bindParam(':end', $end);
$stmt->execute();
$id = $dbh->lastInsertId();
for($x = 0; $x < "51"; $x++) {
$stmt = $dbh->prepare("
SELECT start, end
FROM events
WHERE event_id = :event_id ");
$stmt->bindParam(':event_id', $event_id, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$start = $result['start'];
$end = $result['end'];
$start_date= strtotime($start . '+' . $repeat_frequency . 'DAYS');
$end_date= strtotime($end . '+' . $repeat_frequency . 'DAYS');
$start = date("Y-m-d H:i", $start_date);
$end = date("Y-m-d H:i", $end_date);
unset($stmt);
$stmt = $dbh->prepare(
"INSERT INTO events (start, end ) //and whatever other columns you need
VALUES (:start, :end)");
$stmt->bindParam(':start', $start, PDO::PARAM_STR);
$stmt->bindParam(':end', $end, PDO::PARAM_STR);
$stmt->execute();
$event_id = $dbh->lastInsertId();
}
Так что это просто общая суть вещей. Надеюсь, что опечаток не слишком много, так как я постарался отредактировать их до самых основных, чтобы понять суть. Дайте знать, если у вас появятся вопросы.
EDIT
Чтобы «отображать» события в полном календаре, вам необходим источник событий.
проверить эту ссылку
http://fullcalendar.io/docs/event_data/events_json_feed/
В вашем json-events.php вы отображаете данные события, а затем они отображаются в вашем календаре.
Имейте что-то подобное, чтобы показывать события на странице календаря
$('#calendar').fullCalendar({
events: '/myfeed.php'
});
В вашем файле myfeed.php есть что-то вроде
$dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // set the error mode to excptions
$stmt = $dbh->prepare("SELECT
event_id, title, start, end
FROM events
ORDER BY start");
$stmt->execute();
$events = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){ //important ! $start = "2010-05-10T08:30"; iso8601 format !!
$eventArray['id'] = $row['event_id'];
$eventArray['title'] = $row['title'];
$eventArray['start'] = $row['start'];
$eventArray['end'] = $row['end'];
$events[] = $eventArray;
echo json_encode($events);
Если у вас все еще есть вопросы, ищите здесь на stackoverflow. Я думаю, что я объяснил это довольно хорошо и предоставил много кода. Вот сообщение в блоге, которое я сделал, которое также может помочь http://fajitanachos.com/Fullcalendar-and-recurring-events/ Я нашел все, что мне нужно, чтобы запустить fullcalendar здесь и на домашней странице fullcalendar http://fullcalendar.io/
Надеюсь, это поможет.