我的最终目标是通过JSON动态传递eventSources。在甚至动态生成JSON内容之前,我试图使用文档示例通过JSON URL将一个简单的单个事件传递到我的事件代码中,并手动编写。
我可以看到该URL可以正常工作,因为我可以通过php在我的wordpress网站中回显结果,但是我将JSON URL传递给JS脚本只是使日历崩溃了。我真的很head头。
还提到了prev / next按钮触发带有本地时区日期的GET到JSON(例如,当前显示月份的范围)。我应该如何对json进行语法编码,以便让事件调用找到数据点范围?我对这一切真的很困惑。
JSON文件:calendar.json
{
"title" : "something",
"start" : "2019-04-23"
}
PHP文件:page-calendar.php
<?php
//Wordpress function for URL to the file location
$url = get_stylesheet_directory_uri() . '/calendar.json';
$data = file_get_contents($url);
$content = json_decode($data);
echo $content->title; // Just to test if the URL works
echo $content->start; // This echos just fine
?>
<html lang='en'>
<head>
<meta charset='utf-8' />
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
plugins: [ 'dayGrid' ],
events: $url;
});
calendar.render();
});
</script>
</head>
<body>
<div id='calendar'></div>
</body>
</html>
答案 0 :(得分:2)
JSON必须是事件数组(即使该数组仅包含一个对象)。当前,您只有一个对象,fullCalendar不会读取该对象。
使您的calendar.json
文件看起来像这样:
[
{
"title" : "something",
"start" : "2019-04-23"
}
]
您还需要稍稍更改代码,以便将PHP $url
变量视为PHP并进行渲染,并且这样输出也将被JS视为字符串,而不仅仅是注入到JS中。原样:
events: "<?php echo $url; ?>"
答案 1 :(得分:0)
如果您的php和fullcalendar位于同一页面上,则可能需要此
<?php
$url = get_stylesheet_directory_uri() . '/calendar.json';
?>
<html lang='en'>
<head>
<meta charset='utf-8' />
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
plugins: [ 'dayGrid' ],
events: "<?php echo $url; ?>";
});
calendar.render();
});
</script>
</head>
<body>
<div id='calendar'></div>
</body>
</html>
记住要检查一下calendar.json的输出。 看起来应该是这样
[
{
"title" : "something",
"start" : "2019-04-23"
}
];
答案 2 :(得分:-1)
我不太确定,是否可以解决您的问题,我也不了解WordPress。但是,也许您可以尝试使用WordPress内置函数,在这种情况下,您可以尝试wp_remote_get或找到类似的函数来代替file_get_content()
。因为可能出于安全性或权限方面的原因,您不确定不能从某些URL获取内容。
您可以使用chmod($url, 0000);
对其进行测试,以查看是否允许您更改文件的权限。然后,如果是权限问题,则可以将chmod()
添加到脚本中:
//Wordpress function for URL to the file location
$url = get_stylesheet_directory_uri() . '/calendar.json';
chmod($url, 0777);
//$data = file_get_contents($url);
$data = wp_remote_get($url);
$content = json_decode($data);
chmod($url, 0755);
echo $content->title;
echo $content->start;
您的PHP代码似乎很好。也许var_dump($url);
是为了确保一切正常。
此外,您可以尝试更改
events: $url;
到
events: <?php echo $url; ?>