Ho bisogno di aggiungere un id per ogni singolo evento da Fullcalendar, ho trovato questo http://arshaw.com/fullcalendar/docs/event_data/Event_Object/ ma non so come, questo ID è
unico per ogni singolo evento, perché poi salverò il eventi in un database Mysql. GrazieID di un evento (Fullcalendar)
risposta
L'ID su un oggetto Event è un campo facoltativo. Puoi restituire e utilizzare qualsiasi cosa desideri restituire dallo script sul lato server. Puoi creare un ID composito da una combinazione di campi ... 'calendarName_eventID' o semplicemente utilizzare un eventID dal tuo database. Non sei sicuro di voler esporre la tua chiave primaria in quel modo, però (questo è un altro problema in sé). Per farla breve ... si arriva a creare il proprio valore ID.
Si potrebbe desiderare di avere uno sguardo qui: https://code.google.com/p/fullcalendar/issues/detail?id=713
Le offerte filo con l'eliminazione di un evento del calendario, ma illustra come il manifesto originale stava tramontando l'ID su una richiamata dal suo evento/a salvare.
Spero che sia utile.
Grazie amico ma penso che il post sia troppo vecchio e forse questo è il motivo per cui non funziona per me –
OK, ecco la mia soluzione. prima ottengo l'ultimo evento id dal mio DB e ho più 1 per l'ultimo id
<?php
$sql = mysql_query("SELECT id FROM calendar ORDER BY id DESC LIMIT 1");
$resul = mysql_fetch_row($sql);
$idActual = $resul[0];
$idActual = $idActual + 1;
?>
poi trasmetto l'id di JS
var idActual = "<?php echo $idActual ?>";
e basta.
Stai chiamando questo separatamente quando vai a creare un nuovo evento? Un utente può creare più di un evento prima di salvarlo nel database? – fletch
Sì un utente può creare più di un evento prima di salvarlo nel database –
Senza un postback, come si fa a compilare ogni nuovo '$ idActual' di cui si ha bisogno? Penserei che nella maggior parte dei casi vorresti effettuare una chiamata AJAX per ottenere l'ID necessario. – fletch
Ho trovato la soluzione! Quando si crea ogni caso, mettere il vostro id uniqe qui:
var shift = calendar.fullCalendar('renderEvent',
{
id: shift_id,
title: current_name,
start: new Date(y, m, d + current_day, current_start_time_h, current_start_time_m),
end: new Date(y, m, d + current_day, current_end_time_h, current_end_time_m),
allDay: false
}, true // make the event "stick"
);
Dopo di che ID questa ascoltatore aggiungere nella struttura DOM:
eventAfterRender:function(event, element, view) {
$(element).attr("id","event_id_"+event._id);
},
per ottenere tutti i tuoi eventi in un campo:
console.log(calendar.fullCalendar('clientEvents'));
Ora hai una matrice di eventi e tutti gli eventi sono numerati nella struttura DOM!
vi consiglio di impostare l'id param nei prameters simile a questo:
$('#calendar').fullCalendar({
id: 'calendar',
eventReceive: function(event) {
alert(this.calendar.options.id);
},
eventDrop: function(event) {
alert(this.calendar.options.id);
},
eventClick: function(event) {
alert(this.calendar.options.id);
},
eventRender: function(event) {
alert(this.calendar.options.id);
}
});
soluzione limpida è
Quando si recuperano gli eventi con l'Ajax anche assegnare "id" che proviene da DB
ID: entry.id
$.ajax({
url: '/eventsJson',
type: 'GET',
data: { },
error: function() {
alert('there was an error while fetching events!');
}
}).done(function (doc) {
var event = Array();
$.each(doc, function(i, entry) {
event.push({id:entry.id, title: entry.title, start: entry.start});
});
Evento Clicca
eventClick: function(event, jsEvent, view) {
var title = prompt('Event Title:', event.title, { buttons: { Ok: true, Cancel: false} });
if (title){
event.title = title;
var data = {
'title':title
};
$.ajax({
url: '/events/'+event.id,
data: data,
type: 'POST',
dataType: 'json',
success: function(response){
if(response.status == 'success')
$('#calendar').fullCalendar('updateEvent',event);
},
error: function(e){
alert('Error processing your request: '+e.responseText);
}
});
}
}
Come fletch cita, è necessario generare l'ID per ogni nuovo evento nel DB o con il codice di connessione DB al fine per consentire la concorrenza.Bryan Villafañe usa un approccio simile, ma ecco la mia soluzione.
Per FC javascript:
select: function(start) { //executed when clicked on a day
var title = prompt('Event title:');
if (title) {
$.ajax({
url: '/events.php',
data: 'title='+title+'&start='+moment(start).format('YYYY-MM-DD'),
type: "POST",
success: function(id) {
console.log(id); //used for debug
if (!isNaN(id)){ //on success checks the result
event = { //and adds the event locally with the returned DB id.
title: title,
start: start,
team: team,
id: id
}//then renders the new event
$('#calendar').fullCalendar('renderEvent', event, true);
}
},
error: function(error){
console.log(error);
}
});
} //unselects the clicked day
$('#calendar').fullCalendar('unselect');
}
Questo invia la data come un formato YYYY-MM-DD
dato che io uso solo gli eventi allday, ma è possibile aggiornare in modo appropriato. L'invio di solo start
avrà come risultato un tempo storico di millisecondi.
Il DB restituisce l'ID della riga se l'inserimento ha avuto esito positivo, che viene quindi assegnato all'evento creato localmente e viene visualizzato. Ecco la funzione DB:
$result = "Wrong parameter combination!";
if ($_POST[title]&&$_POST[start]) {
$result = $db->exec("INSERT INTO events (title, start) VALUES ('$_POST[title]','$_POST[start]')");
if($result==1){
$result = $db->lastInsertRowID();
}
}
echo $result;
Qui controllo i due parametri POST e faccio l'inserto. Se l'inserimento ha avuto successo, ottengo l'ultimo ID della riga di inserimento e lo restituisco al JS. Altrimenti viene restituito un messaggio di errore.
Sto usando SQLite3 per il mio DB ma l'ultima riga inserita per MySQL può essere verificata come mostrato here. C'è una piccola possibilità che qualcuno inserisca un altro evento tra il tuo inserto e il controllo dell'ultimo ID, ma a meno che tu non abbia un traffico elevato, starai bene.
Ogni evento ha già un proprio ID univoco:
eventClick: function(event){
alert(event._id);
}
Questo ID non sarà unico perché, come indicato nella documentazione eventi che si ripetono dovrebbero avere lo stesso ID evento. Ogni volta che si popolano eventi in un calendario completo, è possibile fornire id per ogni singolo evento, tuttavia non è obbligatorio. –
Ma ho bisogno di un ID univoco, perché in seguito cancellerò o modificherò l'evento selezionato e ho bisogno di un id per farlo, come posso farlo, dare un id quando sto compilando il calendario? –