繰り返しイベント オプションをフル カレンダーに実装しようとしています。イベントの 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が重複レコードを許可していないと推測しています.重複レコードが欲しかったのですが、どこが間違っているのか教えてください.. :-)