简体   繁体   English

使用全日历的重复事件和非重复事件

[英]recurring event and non-recurring event using fullcalendar

events: [

     {
      id: '<?php echo $event['id']; ?>',
      title: '<?php echo $event['title']; ?>',
      color: '<?php echo $event['color']; ?>',
      start: '<?php echo $start; ?>',
      end: '<?php echo $end; ?>',
      dow: '<?php echo $dow; ?>',
      ranges: [{
                 start: '<?php echo $start; ?>', 
                 end: '<?php echo $end; ?>',
               }]
      },
]

Following image below shows my current status of my calendar: 下图显示了我日历的当前状态: 日历

As seen from the image above, the cardio training has been recurring non-stop. 从上图可以看出,有氧运动一直在不断进行。 Is there a way to stop the recurring event based on the end date in ranges, other than using event render function? 除了使用事件呈现功能之外,是否有一种方法可以根据范围内的结束日期来停止重复发生的事件?

Take note: <?php echo $start; ?> 注意: <?php echo $start; ?> <?php echo $start; ?> and <?php echo $end; ?> <?php echo $start; ?><?php echo $end; ?> <?php echo $end; ?> is a date formatted in YYYY-MM-DD. <?php echo $end; ?>是格式为YYYY-MM-DD的日期。

UPDATED after attempting ADyson's solution: 尝试ADyson解决方案后已更新: 更新日历

   <?php foreach ($events as $event): ..... ?> 
{
      id: '<?php echo $event['id']; ?>',
      title: '<?php echo $event['title']; ?>',
      color: '<?php echo $event['color']; ?>',
      start: '04:00',
      end: '05:00',
      dow: '<?php echo $dow; ?>',
      ranges: [{
                 start: '<?php echo $start; ?>', 
                 end: '<?php echo $end; ?>',
               }]
}, 
{
      id: '<?php echo $event['id']; ?>',
      title: '<?php echo $event['title']; ?>',
      color: '<?php echo $event['color']; ?>',
      start: '<?php echo $start; ?>',
      end: '<?php echo $end; ?>',
} <?php endforeach; ?>

数据

Apparently, it went into recurring and non-recurring event objects due to they are in the foreach loop. 显然,由于它们位于foreach循环中,因此进入了周期性和非周期性事件对象。

SOLUTION

events:[
    <?php 
    inside the foreach loop:
    ..........
     if ($dow == "") {
        ?>
        {
          id: '<?php echo $event['id']; ?>',
          title: '<?php echo $event['title']; ?>',
          color: '<?php echo $event['color']; ?>',
          start: '<?php echo $start; ?>',
          end: '<?php echo $end; ?>',
        },
 <?php }
       else {?>
        {
          id: '<?php echo $event['id']; ?>',
          title: '<?php echo $event['title']; ?>',
          color: '<?php echo $event['color']; ?>',
          start: '04:00',
          end: '05:00',
          dow: '<?php echo $dow; ?>',
          ranges: [{
                     start: '<?php echo $start; ?>', 
                     end: '<?php echo $end; ?>',
                   }]
       },
   <?php } ?>
<?php endforeach; ?>

What you want is perfectly possible. 您想要的完全有可能。 As I mentioned in the comments, all you have to do is modify the eventRender function to check whether the "ranges" property exists on the event being rendered. 正如我在评论中提到的,您要做的就是修改eventRender函数,以检查正在渲染的事件是否存在“ ranges”属性。 If it does, then apply the recurrence rules defined by the ranges. 如果是这样,则应用范围定义的重复规则。 If not, then just allow it to render normally with no interference: 如果不是,则只允许它正常渲染而不会产生干扰:

eventRender: function(event) {
  //only apply recurrence rules if the event has a "ranges" property
  if (event.ranges) {
    return (event.ranges.filter(function(range) { // test event against all the ranges

      return (event.start.isBefore(range.end) &&
        event.end.isAfter(range.start));

    }).length) > 0; //if it isn't in one of the ranges, don't render it (by returning false)
  } else {
    return true; //just allow the event to render normally if it's not recurring
  }
}

For this to work, your events can have the following structures: 为此,您的事件可以具有以下结构:

Non-recurring example: 非重复示例:

{
  title: 'Non Recurring Event',
  start: "2017-10-03T10:30:00",
  end: "2017-10-03T11:30:00",
  allDay: false
}

Recurring example: 重复的示例:

{
  id: 1,
  title: "Recurring Event",
  start: "10:00",
  end: "12:00",
  dow: [1,3,4],
  ranges: [{
      start: "2017-10-01T09:30:00",
      end: "2017-10-04T15:30:00"
    }, {
      start: 2017-10-05T10:00:00",
      end: 2017-10-15T13:30:00"
    }]
}

See a working demo here, containing both recurring and non-recurring events: http://jsfiddle.net/sbxpv25p/27/ 在此处查看有效的演示,其中包含重复事件和非重复事件: http : //jsfiddle.net/sbxpv25p/27/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM