我有一个庞大的数据库和很多事件。每次我转到日历主页(每月视图(时,都会加载数据库中的所有现有事件,尽管我只查看当月。目前,我的html页面超过3MB,并且往往会减慢我的浏览器选项卡。
为了解决这个问题,我开始更改代码以仅以 json 形式获取当月的事件。不幸的是,日期范围的开始和结束日期不起作用 - 页面仍在从数据库中获取所有事件。我已经做了几个小时的研究和很多调整。
我正在使用完整日历V3.10
到目前为止,我设法获取了我的 FullCalendar.io 事件 - 我有两个事件源 - 所以我使用了:
eventSources: [
{
url: 'include/load-calendar-event.php', // use the `url` property
color: '#008000',
},
{
url: 'include/load-calendar-event-retour.php', // use the `url` property
color: '#008000',
},
// any other sources...
],
用于获取事件的相应两个文件几乎相同 - 因此一个应该足够了:
加载日历事件.php
require_once('bdd.php');
$sql = "SELECT * FROM messages"; // this selects all rows
$req = $bdd->prepare($sql);
$req->execute();
$events = $req->fetchAll();
$data = array();
foreach($events as $event) {
$start = explode(" ", $event['start']);
$end = explode(" ", $event['end']);
if($start[1] == '00:00:00'){
$start = $start[0];
}else{
$start = $event['start'];
}
if($end[1] == '00:00:00'){
$end = $end[0];
}else{
$end = $event['end'];
}
$data[] = array(
'id'=> $event['id'],
'title'=> $event['title'],
'start'=> $start,
'end'=> $end,
'color'=> $event['color']
);
}
echo json_encode($data);
通过调用日历页面,浏览器将进行以下调用 - 请注意日期(2020-01-01 - 2020-02-01(和数据格式:
...include/load-calendar-event.php?start=2020-01-01&end=2020-02-01&_=1578601056565
和
...include/load-calendar-event-retour.php?start=2020-01-01&end=2020-02-01&_=1578601056566
火虫中的呼叫截图
事件的日期格式使用以下格式(YYYY-MM-DD HH:mm:ss(保存在数据库中:
2020-01-11 10:00:00
问题:
知道如何仅获取当月的事件吗?
为什么要选择表中的所有行并迭代它们?
需要更新查询以拉取作为$_GET
参数传递的开始值和结束值。
require_once('bdd.php');
$sdate = $_GET['start']; //LIKE THIS
$edate = $_GET['end']; //AND THIS
$sql = "SELECT * FROM messages WHERE date >= ".$sdate." AND date <= ".$edate; // this selects all rows. Change 'date' to whatever your column name is in the database.
$req = $bdd->prepare($sql);
$req->execute();
$events = $req->fetchAll();
$data = array();
foreach($events as $event) {
$start = explode(" ", $event['start']);
$end = explode(" ", $event['end']);
if($start[1] == '00:00:00'){
$start = $start[0];
}else{
$start = $event['start'];
}
if($end[1] == '00:00:00'){
$end = $end[0];
}else{
$end = $event['end'];
}
$data[] = array(
'id'=> $event['id'],
'title'=> $event['title'],
'start'=> $start,
'end'=> $end,
'color'=> $event['color']
);
}
echo json_encode($data);
您可以通过简单地使用 PHP 的日期函数生成开始和结束日期而不是使用查询字符串参数传入变量来更轻松地执行此操作。 尽管这会给您更大的灵活性。 如果设置了这些值,您甚至可以包含一些 if/else 语句来生成不同的查询。
请参阅:https://www.php.net/manual/en/function.date.php