您好我正在使用fullCalendar 1.5.1,我创建了一个PHP查询,几乎可以返回我想在日历中使用的所有内容。这是一个集成系统,所以我不得不切换到_ASSOC才能返回一个MySQLi联合数组:
<?php
global $json_result;
global $myqueryresult;
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_ASSOC;
$myquery = "SELECT id, title, eventstart, eventend FROM View1";
$myqueryresult = $GLOBALS["conn"]->GetAll($myquery);
$json_result = json_encode($myqueryresult);
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_BOTH;
?>
...除了它不接受数据,因为键/值对中的键被引用(根据JSON标准,所以我读过)。
如果我只输入结果MySQL数组,Javascript只会将数据显示为“数组”。如果我在数组上使用json_encode(),我得到的东西看起来是一个合适的JSON对象,但由于引用了键,它不能用于fullCalendar。
这是我的jQuery for fullcalendar:
$(document).ready(function() {
$('#calendar').fullCalendar({
height: 600,
firstDay: 6,
theme: true,
year: 2012,
month: 0,
date: 7,
minTime: 6,
maxTime: 23,
startParam: 'eventstart',
endParam: 'eventend',
defaultView: 'agendaWeek',
allDaySlot: false,
slotMinutes: 15,
events: <?php echo $json_result; ?>
// put your options and callbacks here
})
});
如果我将$ MySQL数组用于$ json_result:
,这是生成的HTML源代码 $(document).ready(function() {
$('#calendar').fullCalendar({
<...snip...>
slotMinutes: 15,
events: Array
// put your options and callbacks here
})
});
如果我使用json_encode($ thesamearray)
,结果如下 $(document).ready(function() {
<...snip...>
events: [{"id":"51","title":"Ship in Miami, Florida","eventstart":"2012-01-07 07:00:00","eventend":"2012-01-07 15:00:00"},{"id":"547","title":"Miami, Florida","eventstart":"2012-01-14 07:00:00","eventend":null}]
// put your options and callbacks here
})
});
如何调整此值以使其在fullCalendar中作为数组运行?它似乎不想采用JSON字符串或数组,至少在数组现在来自PHP的格式中。
谢谢, 克里斯
SOLUTION:
别名MySQL字段:
<?php
global $json_result;
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_ASSOC;
$myquery = "SELECT id, title, eventstart AS start, eventend AS end FROM View1";
$myqueryresult = $GLOBALS["conn"]->GetAll($myquery);
$json_result = json_encode($myqueryresult);
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_BOTH;
?>
还调整了jQuery以删除我的start / endparams并将allDaySlot更改为allDayDefault:
$(document).ready(function() {
$('#calendar').fullCalendar({
height: 600,
firstDay: 6,
theme: true,
year: 2012,
month: 0,
date: 7,
minTime: 6,
maxTime: 23,
defaultView: 'agendaWeek',
allDayDefault: false,
slotMinutes: 15,
events: <?php echo $json_result; ?>
// put your options and callbacks here
})
});
现在,如果我只能找到一种方法让它显示为期8天的横向议程,我的麻烦可能已经结束了!谢谢大家的提示。
答案 0 :(得分:1)
根据Event Object
的文档,开始日期是必需的,必须指定为名为start
的属性 - 您使用的名称为eventstart
请注意,根据文档,startParam
和endParam
是事件的JSON Feed选项的参数,似乎不会更改用于开始和结束时间的属性的名称
更新1
除非您将allDay: false
指定为事件的属性,否则我会对此进行一些操作,有点违反直觉,即使具有特定的时间范围,它也会显示在顶部的全天位置已使用allDaySlot: false
禁用的日历。这是a working example使用几乎所有原始设置。
更新2
从您对Matt的回答和文档的评论中,我看到allDay
属性的全局默认值继承自allDayDefault
属性,默认为true
。因此,通过将选项中的allDayDefult: false
传递给fullCalendar()
,您可以避免为每个事件单独指定allDay: false
。这是updated fiddle.。请注意,您不必删除allDaySlot
,它只是指示显示全天事件的插槽是否显示在顶部。
答案 1 :(得分:0)
<?
$username = "root";
$password = "";
$hostname = "localhost";
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
$selected = mysql_select_db("db_name",$dbhandle)
or die("Could not select examples");
$sql = 'SELECT * from schedule';
$result = mysql_query($sql);
$events = array();
while ($row = mysql_fetch_assoc($result)) {
$eventsArray = array();
$eventsArray['id'] = $row['idschedule'];
$eventsArray['title'] = $row['schedule_name'];
$eventsArray['start'] = $row['date_start']. " " . $row['time_start'];
$eventsArray['end'] = $row['date_end']. " ".$row['time_end'];
if($all==true)
{
$vall = str_replace('}',',"allDay":true}',json_encode($eventsArray));
}
else
{
$vall = str_replace('}',',"allDay":false}',json_encode($eventsArray));
}
$events[] = trim($vall);
}
$val = implode($events);
$val2 = str_replace('}','},',$val);
?>
然后在像这样的事件中传递这个
events: [<?=$val2?>],
它会起作用。