0

繰り返しイベント オプションをフル カレンダーに実装しようとしています。イベントの 1 つのインスタンスとその繰り返しの詳細を db に保存しています。

繰り返しの詳細によると、私は以下に投稿されているphpコードからイベントを繰り返そうとしています。

       $calendar_query = "select * from test.calendar where User_Id = 07";
    $Calendar_res = mysql_query($calendar_query) or die(mysql_error());


    while ($calendar_row = mysql_fetch_assoc($Calendar_res)) {
    $flag=false;
    $cal_id=$calendar_row['Calendar_Id'];
    $Repeating_query="select * from repeating_event where Calendar_id='$cal_id'";
    $Repeating_res = mysql_query($Repeating_query) or die(mysql_error());

    while ($repeating_row = mysql_fetch_assoc($Repeating_res)) {

    if($repeating_row['repeats']==0){
    $flag=true; $i=0;
    while($i<$repeating_row['ends_after']){
    if($i==0){

    $eventsArray['id'] =  $calendar_row['Calendar_Id'];
    $eventsArray['userid'] = $calendar_row['User_Id'];
    $eventsArray['title'] = $calendar_row['Event_Title'];
    $eventsArray['start'] = date('Y-m-d H:i:s', strtotime($calendar_row['StartDateTime']));
    $eventsArray['end'] = date('Y-m-d H:i:s', strtotime($calendar_row['EndDateTime']));
    $eventsArray['description'] = $calendar_row['Event_Desc'];
    $eventsArray['venue']=$calendar_row['Event_Venue'];
    $d1=strtotime($calendar_row['StartDateTime']);
    $d2=strtotime($calendar_row['EndDateTime']);
    if($d1==$d2){
    $eventsArray['allDay'] = true;
    }
    else{
    $eventsArray['allDay'] = false;
    }
    }   

    else{

    $eventsArray['id'] =  $calendar_row['Calendar_Id'];
    $eventsArray['userid'] = $calendar_row['User_Id'];
    $eventsArray['title'] = $calendar_row['Event_Title'];
    $eventsArray['start'] = date('Y-m-d H:i:s', strtotime($calendar_row['StartDateTime']) + ($repeating_row['repeats_every']*86400));
    $eventsArray['end'] = date('Y-m-d H:i:s', strtotime($calendar_row['EndDateTime']) + ($repeating_row['repeats_every']*86400));
    $eventsArray['description'] = $calendar_row['Event_Desc'];
    $eventsArray['venue']=$calendar_row['Event_Venue'];
    $d1=strtotime($calendar_row['StartDateTime']);
    $d2=strtotime($calendar_row['EndDateTime']);
    if($d1==$d2){
    $eventsArray['allDay'] = true;
    }
    else{
    $eventsArray['allDay'] = false;
    }
    }  
    $i++;
    }
    }
    }

$events[] = $eventsArray;

}

echo json_encode($events);

出力は次のとおりです。

[{"id":"20","userid":"7","title":"Suresh Birthday","start":1357686000,"end":1357686000,"description":"suresh birthday on 9t april","venue":"Bangalore","allDay":true},
{"id":"22","userid":"7","title":"appointment with doctor","start":"2012-12-01 01:00:00","end":"2012-12-01 02:00:00","description":"for dental checkup","venue":"fortis","allDay":false},
{"id":"23","userid":"7","title":"asdfasd","start":1363042800,"end":1363042800,"description":null,"venue":null,"allDay":true},
{"id":"70","userid":"7","title":"asdf","start":1358204400,"end":1358204400,"description":"asdf","venue":"asdf","allDay":true},
{"id":"71","userid":"7","title":"rahj","start":1358895600,"end":1358895600,"description":"","venue":"as","allDay":true},
{"id":"81","userid":"7","title":"cc","start":1356908400,"end":1356908400,"description":"cc","venue":"","allDay":true},
{"id":"82","userid":"7","title":"kk","start":1358722800,"end":1358722800,"description":"","venue":"","allDay":true},
{"id":"83","userid":"7","title":"mm","start":1359327600,"end":1359327600,"description":"","venue":"","allDay":true},
{"id":"84","userid":"7","title":"vv","start":1359068400,"end":1359068400,"description":"","venue":"","allDay":true},
{"id":"85","userid":"7","title":"zz","start":1358463600,"end":1358463600,"description":"zz","venue":"zz","allDay":true},
{"id":"87","userid":"7","title":"qq","start":1358118000,"end":1358118000,"description":"qq","venue":"qq","allDay":true}]

期待される結果:-

[{"id":"20","userid":"7","title":"Suresh Birthday","start":1357686000,"end":1357686000,"description":"suresh birthday on 9t april","venue":"Bangalore","allDay":true},
{"id":"22","userid":"7","title":"appointment with doctor","start":"2012-11-28 01:00:00","end":"2012-11-28 02:00:00","description":"for dental checkup","venue":"fortis","allDay":false},
{"id":"22","userid":"7","title":"appointment with doctor","start":"2012-11-29 01:00:00","end":"2012-11-29 02:00:00","description":"for dental checkup","venue":"fortis","allDay":false},
{"id":"22","userid":"7","title":"appointment with doctor","start":"2012-11-30 01:00:00","end":"2012-11-30 02:00:00","description":"for dental checkup","venue":"fortis","allDay":false},
{"id":"22","userid":"7","title":"appointment with doctor","start":"2012-12-01 01:00:00","end":"2012-12-01 02:00:00","description":"for dental checkup","venue":"fortis","allDay":false},
{"id":"22","userid":"7","title":"appointment with doctor","start":"2012-12-02 01:00:00","end":"2012-12-02 02:00:00","description":"for dental checkup","venue":"fortis","allDay":false},
{"id":"23","userid":"7","title":"asdfasd","start":1363042800,"end":1363042800,"description":null,"venue":null,"allDay":true},
{"id":"70","userid":"7","title":"asdf","start":1358204400,"end":1358204400,"description":"asdf","venue":"asdf","allDay":true},
{"id":"71","userid":"7","title":"rahj","start":1358895600,"end":1358895600,"description":"","venue":"as","allDay":true},
{"id":"81","userid":"7","title":"cc","start":1356908400,"end":1356908400,"description":"cc","venue":"","allDay":true},
{"id":"82","userid":"7","title":"kk","start":1358722800,"end":1358722800,"description":"","venue":"","allDay":true},
{"id":"83","userid":"7","title":"mm","start":1359327600,"end":1359327600,"description":"","venue":"","allDay":true},
{"id":"84","userid":"7","title":"vv","start":1359068400,"end":1359068400,"description":"","venue":"","allDay":true},
{"id":"85","userid":"7","title":"zz","start":1358463600,"end":1358463600,"description":"zz","venue":"zz","allDay":true},
{"id":"87","userid":"7","title":"qq","start":1358118000,"end":1358118000,"description":"qq","venue":"qq","allDay":true}]

"id": "22" のインスタンスが 5 つあることが予想されますが、出力では 1 つしか得られないことがはっきりとわかります。

ここで直面している問題は、同じイベントの重複したインスタンスを保存できないことです。

ループ構造は問題ないように思えます。echo ステートメントをループに入れると、繰り返しの詳細に従って「n」回の発生が表示されますが、それを json にエンコードしている場合、最終的な json オブジェクトにはイベントの最新のレコードしかありません (何もありません)。最後に繰り返されたイベントの詳細)。

私はjsonが重複レコードを許可していないと推測しています.重複レコードが欲しかったのですが、どこが間違っているのか教えてください.. :-)

4

1 に答える 1

1

$events[]同じいくつかの状態に設定しているように見えます...$eventsArray各ループの開始時に再初期化しないのはなぜですか: $eventsArray=array()...?

于 2013-01-25T07:11:55.177 に答える