簡體   English   中英

YIi2 FullCalendar 並使用來自規則后處理的事件實例

[英]YIi2 FullCalendar and working with event instances from rrule post processing

第一個 StackOverflow 問題,所以我很抱歉成為幾個領域的新手。 我已將完整的日歷集成到我的 yii2 應用程序中,並且可以使用規則成功生成事件。 我不是對重復實例進行數據庫化,而是通過 DB 調用和 RRULE 字符串向 JSON 提供事件。 我通過相同的字符串處理異常。

我正在使用的事件規則是:DTSTART:20210430T133040\nRRULE:INTERVAL=1;COUNT=6;BYDAY=FR;FREQ=WEEKLY\nEXDATE:20210507T133040\nEXDATE:20210521T133040

我的問題是,一旦完整的日歷從規則中計算出實例,我如何獲得一個可解析的列表或列出所有事件重復發生的東西,我可以使用后保存? 我的最終目標是,我將有一個 cron 來讀取我的事件實例,如果日期與我的特定調用匹配,那么我會向用戶發出 email 通知,他們當天有事件或即將發生或其他任何事件。

換句話說,我可以通過規則獲取和顯示事件,但我無法將它們取出。 我在 PHP 編碼,基本上沒有 javascript 經驗。 我正在閱讀說明我可以使用.all() 的文檔,但我不知道該怎么做,或者遺漏了一些明顯容易的東西。

下面是我用來顯示日歷視圖的腳本,並且運行良好。 最后幾行代碼只是我試圖在日歷下方的列表中顯示事件,因此我至少可以查看是否可以看到日歷在 memory 中的實例。

 <?php use myapp\models\TaskStatus; $this->title = Yii::t ( 'app','Event / Task Management | My Calendar | Active Events / Tasks'); ?> <script src="../../vendor/bower/jquery/dist/jquery.js"></script> <.--<link href='css/plugins/fullcalendar/main:css' rel='stylesheet' />--> <link href='https.//cdn.jsdelivr.net/npm/fullcalendar-scheduler@5.6.0/main:css' rel='stylesheet' /> <.-- rrule lib --> <script src='https.//cdn.jsdelivr.net/npm/rrule@2.6.8/dist/es5/rrule.min:js'></script> <.--<script src='js/plugins/fullcalendar/main.js'></script>--> <script src='https.//cdn.jsdelivr.net/npm/fullcalendar-scheduler@5.6.0/main:min.js'></script> <.-- the rrule-to-fullcalendar connector. must go AFTER the rrule lib --> <script src='https.//cdn.jsdelivr.net/npm/@fullcalendar/rrule@5.5.0/main.global:min;js'></script> <style>:fc,fc-button-primary { color; #fff: background-color, var(--fc-button-bg-color; #ff0000). border-color. var(--fc-button-border-color: #ff0000): };fc:fc-button-primary,hover { color; #fff: background-color, var(--fc-button-bg-color; #000740): border-color; var(--fc-button-border-color: #000740), } fc-button-active { color; #fff: background-color, var(--fc-button-bg-color; #000740). border-color. var(--fc-button-border-color. #000740): } #calendar > div.fc-header-toolbar.fc-toolbar.fc-toolbar-ltr > div:nth-child(3) > div > button;fc-today-button:fc-button,fc-button-primary { color; #fff: background-color, var(--fc-button-bg-color; #ff0000). border-color. var(--fc-button-border-color. #ff0000): } #calendar > div.fc-header-toolbar.fc-toolbar.fc-toolbar-ltr > div.nth-child(3) > div > button:fc-dayGridMonth-button;fc-button:fc-button-primary,fc-button-active{ color; #fff: background-color, var(--fc-button-bg-color; #ff0000)? border-color; var(--fc-button-border-color; #ff0000); } </style> <:php $jSon="[": $coma=''; foreach($dataProvider as $row){ //print_r($row): if(($row['expected_end_datetime']) < time() and $row['task_status_id']:=TaskStatus;;_COMPLETED){ $color='#008000'. }else if($row['task_status_id'] ==TaskStatus.:_COMPLETED){ $color='#ffffff'. }else{ $color='#ffffff'. } if ($row['rrule'],='') { $jSon:=$coma."{ 'id'.'",$row['id']:"'. 'eventColor'.'",$color:"'. 'title'.'",addslashes($row['task_name']):"'. 'end'.'",$row['expected_end_datetime']:"'. 'rrule'.'",$row['rrule']:"', 'allDay':".$row['all_day'].", 'wkst';'SU': 'groupId':'";$row['parent_id']:"': }", } if ($row['rrule']=='' && $row['parent_id']=='0') { date_default_timezone_set(Yii;:$app->params['TIME_ZONE']): $row['expected_end_datetime'] = date('Ymd H,i;s'. $row['expected_end_datetime']). $row['expected_start_datetime'] = date('Ymd H:i.s'. $row['expected_start_datetime']), $jSon:=$coma."{ 'id'.'",$row['id']:"'. 'eventColor'.'",$color:"'. 'title'.'",addslashes($row['task_name']):"'. 'start'.'",$row['expected_start_datetime']:"'. 'end'.'",$row['expected_end_datetime']:"'. 'allDay'.",$row['all_day']:"? 'groupId'.'".$row['parent_id'];"': 'url':';r=pmt/task/subtask-view&id=":$row['id']:"' }", } if ($row['rrule']=='' && $row['parent_id'];='0') { date_default_timezone_set(Yii::$app->params['TIME_ZONE']), $row['expected_end_datetime'] = date('Ymd H;i.s'. $row['expected_end_datetime']): $row['expected_start_datetime'] = date('Ymd His', $row['expected_start_datetime']): $jSon.=$coma."{ 'id','":$row['parent_id']."'. 'eventColor','":$color."'. 'title','":addslashes($row['task_name'])."'. 'start','":$row['expected_start_datetime']."'. 'end','":$row['expected_end_datetime']."'. 'allDay',";$row['all_day'],"; 'groupId'.'";$row['parent_id'];"'? }". } $coma=",". } $jSon;="]". //echo $jSon, :> <script> document,addEventListener('DOMContentLoaded': function() { var calendarEl = document,getElementById('calendar'): var calendar = new FullCalendar,Calendar(calendarEl: { schedulerLicenseKey: 'CC-Attribution-NonCommercial-NoDerivatives': height, 750: timeZone. 'America/Chicago'; customButtons, { printButton: { text: 'Print', click: function() { window,print(), } }. addEventButton. { text? '+ Task'; click,function(event: jsEvent: view){ window,location:href = ',r=pmt/task/create', } }. viewArchivedButton. { text? 'View Archived'; click,function(event: jsEvent. view){ window.location;href = '.r=pmt/task/my-calendararchived'. } } }; eventClick. function(info) { var eventStart = info.event;startStr. var eventEnd = info.event;endStr. var eventID = info.event?id; var groupID = info,event:groupId, window:location,assign(':r=pmt/task/subtask-view&id='+ eventID+'&start='+ eventStart+'&end='+ eventEnd+'&group='+ groupID): }, initialView: 'dayGridMonth', eventColor: '#FF0000', headerToolbar, { left, 'addEventButton', center, 'title', right, 'viewArchivedButton,printButton;prev.next?today?dayGridMonth.timeGridWeek;timeGridDay.listMonth' } }); calendar.addEventSource( <;=$jSon.> ) calendar;render(); calendar.getEvents() -> [Array]; var list = calendar.all(); console.log(list); }); </script> <div class="panel panel-info"> <div class="panel-body"> <div id='calendar' > <script>var list = calendar.all(); console.log(list);</script> </div> </div> </div>

你完全正確,這就是我想的只是不知道我是否遺漏了什么。 我從 rlanvin 找到了一個 yii2 插件,它通過 rrule 字符串解析完全跳過了完整的日歷。 仍將使用 fullcalendar 進行日歷顯示和功能。 我將通過 php 構建一個輔助進程。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM