Mic*_*ael 4 php mysql jquery fullcalendar
我正准备在使用PHP/MySQL的在线应用程序中使用基于JQuery的FullCalendar,并注意到在实现重复事件时,必须在事件数组中为每次重复发生一个新项目(使用相同的ID),如下所示:
events: [
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d-1, 16, 0),
allDay: false
},
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d+6, 16, 0),
allDay: false
},
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d+13, 16, 0),
allDay: false
}
]
Run Code Online (Sandbox Code Playgroud)
好的,这不是什么大不了的事.使用MySQL,我只会在事件循环中输入很多次,如果它没有结束日期,那么将来可能会从该事件的开始日期开始100次.但现在我正在用一堆甚至可能不需要的JavaScript加载页面(如果用户只打开日历看一个月).不酷.
必须有一个更好的方法......有没有人有自己的经验?
默认情况下,FullCalender将使用lazyFetching获取当前时间范围的事件.通常,这意味着您只能在用户切换当前月份时发送ajax调用.您可以通过关闭缓存来减少服务器负载:
$('#calendar').fullCalendar({
events: {
url: '/myfeed.php',
cache: true
}
});
Run Code Online (Sandbox Code Playgroud)
此外,您应该优化服务器上的SQL以仅在给定时间范围内获取事件:
FullCalendar将确定它需要事件的日期范围,并将在GET参数中传递该信息....这是FullCalendar可能访问的URL:
/myfeed.php?start=1262332800&end=1265011200&_=1263178646
如果在SQL中使用这些get参数,则会大大减少发送给客户端所需的数据:
SELECT *
FROM events
WHERE start > PARAMS_START_DATE AND end < PARAMS_END_DATE
Run Code Online (Sandbox Code Playgroud)
显然,这在使用重复事件时不会那么简洁,例如(伪代码):
recurring_events.each do |recurring_event|
running_date = recurring_event.starts_on
while running_date < PARAMS_END_DATE
if running_date > PARAMS_START_DATE
events.push { :event => event.id, :date => running.date, ... }
end
running_date = running_date + recurring_event.frequency_as_days
end
end
Run Code Online (Sandbox Code Playgroud)
这样,您只需发回适用于当前视图的完整日历即可.
| 归档时间: |
|
| 查看次数: |
5343 次 |
| 最近记录: |