如何正确使用JSON将事件/事件源传递给FullCalendar?

时间:2019-04-24 01:45:38

标签: javascript php json fullcalendar fullcalendar-4

我的最终目标是通过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>

3 个答案:

答案 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; ?>