【问题标题】:FullCalendar using Database and Google CalendarFullCalendar 使用数据库和谷歌日历
【发布时间】:2018-07-15 21:31:09
【问题描述】:

是否可以使用 FullCalendar 同时显示来自数据库的自定义事件和 Google 日历?我已经完成了从数据库中显示我的自定义事件,并且我还想使用 Google 日历显示我所在国家/地区的假期。我的问题是,可以在 FullCalendar 中做到这一点吗?这是我的代码:

googleCalendarApiKey: 'AIzaSyBTYvbg3gKLNi0A8qOXMyk6q-EnzM6DZq4',
events: [ googleCalendarId:'en.philippines#holiday@group.v.calendar.google.com',
  <?php 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'];
    }
  ?>
    {
      id: '<?php echo $event['id']; ?>',
      title: '<?php echo $event['title']; ?>',
      start: '<?php echo $start; ?>',
      end: '<?php echo $end; ?>',
      color: '<?php echo $event['color']; ?>',
    },
  <?php endforeach; ?>

【问题讨论】:

  • 好的,感谢您的帮助。我试试你给的这个链接。谢谢
  • 我在下面添加了完整的答案并附有解释,实际上,请看一下

标签: php fullcalendar


【解决方案1】:

events: [ googleCalendarId:'en.philippines#holiday@group.v.calendar.google.com'...JS 数组不能包含命名项...不确定这甚至可以在浏览器中编译。您是否遇到控制台错误?即使这是有效的 JS,您也不能将谷歌日历指定为事件数组的一项,fullCalendar 期望“事件”是 要么 URL 或对象数组,而不是组合.如果您想将数据库中的数据与外部源中的数据结合起来,例如google 日历,那么您可能正在寻找的是“事件源”(请参阅​​https://fullcalendar.io/docs/eventSources

通过这种方式,您可以为 fullCalendar 提供获取事件的不同方式的列表。第一个条目可以是您的 PHP 代码生成的数据,第二个可以是您的 Google 日历详细信息,告诉它离开并从 Google 日历下载事件:

从代码中删除events: 选项,改为指定:

eventSources: [
  //first event source:
  [ 
    <?php 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'];
    }
  ?>
    {
      id: '<?php echo $event['id']; ?>',
      title: '<?php echo $event['title']; ?>',
      start: '<?php echo $start; ?>',
      end: '<?php echo $end; ?>',
      color: '<?php echo $event['color']; ?>',
    },
    <?php endforeach; ?>
  ],
  //second event source:
  {
    googleCalendarId:'en.philippines#holiday@group.v.calendar.google.com'
  }
]

注意如果您想合并 Google 日历活动,请确保您还遵循了https://fullcalendar.io/docs/google-calendar中列出的所有步骤

【讨论】:

  • @YadYoung 没问题,如果答案对您有帮助,请记得将其标记为“已接受”(单击答案旁边的勾号,使其变为绿色)-谢谢 :-)
【解决方案2】:

你应该可以用addEventSource做到这一点:

$('#myCal').fullCalendar( ‘addEventSource’, source );

在哪里

Source 可能是 Array/URL/Function,就像在 events 选项中一样。 事件将立即从此源获取并放置在 日历。

所以,source 可以是 Google 网址或包含您的事件的数组。

【讨论】:

  • 是的,但“addEventSource”并不是真正需要作为单独的命令,它可以包含在初始设置中 - 请参阅“多个 Google 日历”部分下的 fullcalendar.io/docs/google-calendar
  • 我没有注意到这一点。在这一点上,我想知道为什么要创建这篇文章,因为 OP 的代码看起来是正确的。
  • 实际上现在你让我仔细观察了我才意识到,代码根本不正确 - 他们正在定义 events: [ googleCalendarId:'en.philippines#holiday@group.v.calendar.google.com'...JS 数组不能包含命名项...不是确保这甚至可以在浏览器中编译
  • 你是对的!!所以,events 应该是一个事件数组,eventSources 应该是一个带有 GC id 的单个对象的数组,对吧?
  • 那么你应该定义 eventSources 参数,它应该是一个数组,数组中的一个条目是一个包含 GC ID 的对象,另一个条目是一个包含事件的数组由 PHP 输出。您不能在同一设置中同时使用 eventseventSourcesevents 是拥有一个事件源的简写。一旦你有多个,你将其删除,并将其中的内容简单地作为 eventSources 中的项目之一。
【解决方案3】:

用途:

eventSources: [{googleCalendarId: 'xxxxxxxxx@gmail.com', className: 'gcal-event'},{url:'events.php',}],

【讨论】:

  • 对于长期价值,请解释为什么此代码解决了 OP 的问题。仅代码的答案不受欢迎。解释帮助未来的访问者学习,并将这些知识应用于他们自己的代码中的类似问题。他们也更有可能获得支持。考虑编辑以改进您的答案,并保持 SO Answers 的高质量。感谢您的贡献。
猜你喜欢
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
相关资源
最近更新 更多