Jquery Fullcalendar经常性活动

Gau*_*tam 6 fullcalendar

如何在Jquery fullcalendar中显示重复出现的事件?比如特定日的事件开始并继续运行下一年,那么我将如何在fullcalendar中显示它.

注意:事件信息来自数据库

Faj*_*hos 14

完整日历不支持开箱即用的重复活动.这就是我做的.

当我添加一个事件时,我有一个用于重复事件的选择框.假设用户选择它每周重复一次.然后,我将一个事件插入到我的事件表中,父事件ID对于该事件的所有实例都是相同的.

完整日历使重复活动必须具有相同的事件ID.所以在我的事件表中,我有一个唯一的事件ID列和一个父ID,它是我用来呈现事件的列.

所以无论如何,在我插入第一个事件后,我立即运行一个循环,选择具有相同父ID的最后一个插入事件,向其添加7天,然后将其插入到事件表中.我循环这个过程50次,然后我有一个事件,每周发生一年.

这是一些代码:

当用户选择时间范围时,我打开一个对话框

    select: function(start, end){

            $( "#add_class" ).dialog( "open" ); 
     },
Run Code Online (Sandbox Code Playgroud)

在对话框中,我有一个下拉选择

<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>
Run Code Online (Sandbox Code Playgroud)

然后我使用AJAX将此信息提交到名为add_class.php的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" );
            }
        },
Run Code Online (Sandbox Code Playgroud)

这是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();
 }
Run Code Online (Sandbox Code Playgroud)

所以这只是事情的一般要点.希望没有太多的拼写错误,因为我试图将其编辑到只需要了解要点的基本要素.如果您有任何疑问,请告诉我.

编辑

要在fullcalendar上"显示"事件,您需要拥有一个事件源.

看看这个链接

http://fullcalendar.io/docs/event_data/events_json_feed/

在您的json-events.php中,您回显事件数据,然后它会显示在您的日历上.

有类似的东西在您的日历页面上显示事件

$('#calendar').fullCalendar({
events: '/myfeed.php'
});
Run Code Online (Sandbox Code Playgroud)

在你的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);
Run Code Online (Sandbox Code Playgroud)

如果您仍有疑问,请在此处搜索stackoverflow.我想我已经解释得很好,并提供了大量的代码.这是我发的一篇博文,也可以帮助http://fajitanachos.com/Fullcalendar-and-recurring-events/ 我找到了在这里和fullcalendar主页http:// fullcalendar上运行fullcalendar所需的一切. IO /

我希望这有帮助.