completa calendario non supporta gli eventi ricorrenti, fuori dalla scatola. Ecco cosa ho fatto.
Quando aggiungo un evento, ho una casella di selezione che si riferisce a eventi ricorrenti. Diciamo che un utente lo seleziona per ripetere ogni settimana. Quindi inserisco un evento nella mia tabella degli eventi con un ID padre che sarà lo stesso per tutte le istanze di quell'evento.
Il calendario completo rende in modo che gli eventi ricorrenti debbano avere lo stesso ID evento. Quindi nella mia tabella degli eventi ho una colonna ID evento univoca e un ID genitore, che è la colonna che uso per il rendering degli eventi.
Quindi, subito dopo aver inserito il primo evento, eseguo un ciclo che seleziona l'ultimo evento inserito con lo stesso ID padre, aggiungendo 7 giorni e inserendolo nella tabella degli eventi. Ciclo continuo attraverso questo processo altre 50 volte e poi ho un evento che si verifica ogni settimana per un anno.
Ecco po 'di codice:
Quando un utente seleziona un intervallo di tempo che apro una finestra
select: function(start, end){
$("#add_class").dialog("open");
},
Nella finestra di dialogo, ho un menu a discesa selezionare
<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>
Poi mi presento queste informazioni utilizzando AJAX a una pagina PHP chiamata 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");
}
},
Qui viene la parte add_class.php in cui ho effettivamente entrare nel database
$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();
}
Ecco, questo è solo un senso generale delle cose. Speriamo che non ci siano troppi errori di battitura mentre provo a modificarlo solo per l'essenziale per ottenere il risultato. Fatemi sapere se avete domande.
EDIT
Per gli eventi "Display" a fullcalendar è necessario disporre di una fonte di evento.
controlla questo link
http://fullcalendar.io/docs/event_data/events_json_feed/
Nella tua JSON-events.php si echo i dati degli eventi e poi viene visualizzato sul vostro calendario.
avere qualcosa di simile per mostrare gli eventi sulla tua pagina del calendario
$('#calendar').fullCalendar({
events: '/myfeed.php'
});
Nella tua myfeed.file php hanno qualcosa sulla falsariga di
$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);
Se hai ancora domande, cerca qui su StackOverflow. Penso di averlo spiegato abbastanza bene e fornito un sacco di codice. Ecco un post sul blog che potrebbe essere di aiuto http://fajitanachos.com/Fullcalendar-and-recurring-events/ Ho trovato tutto ciò di cui avevo bisogno per eseguire fullcalendar qui e sulla home page fullcalendar http://fullcalendar.io/
Spero che questo aiuti.
Futuri lettori, ci sono modi più semplici per farlo ora (probabilmente dipende dalle vostre esigenze specifiche). Vedi http://stackoverflow.com/questions/15161654/recurring-events-in-fullcalendar – slicedtoad