2012-03-13 16 views
6

Come mostrare eventi ricorrenti in fullcalender Jquery ?? come l'evento inizia in un giorno particolare e continua a correre per il prossimo anno, quindi come lo visualizzerei in fullcalender.Evento ricorrente Jquery Fullcalender

Nota: le informazioni sugli eventi è venuta da Database

Grazie in anticipo

+1

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

risposta

14

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.

+0

Grazie per la risposta .... sarebbe di grande aiuto se si invia un codice :) – Gautam

+0

Grazie per la risposta .... questo è tutto su come salvare eventi ricorrenti, ma mi piacerebbe sapere come visualizzare questo evento ricorrente nel Database e im utilizzando Java con questo calendario – Gautam

+0

Stai usando Java o Javscript? Fullcalendar utilizza Javascript. Con fullcalendar, si visualizzano gli eventi utilizzando una fonte di eventi. Può trattarsi di un Google Calendar o di eventi da un database estratto da un file. Ogni evento che si esegue il rendering deve avere lo stesso ID evento. Il modo più semplice è quello di avere una riga separata nel database per ogni evento con lo stesso ID evento. Non sono a conoscenza di un buon modo per ripetere un evento quando si chiama un solo evento dal proprio database. – FajitaNachos