2013-05-11 100 views
0

我是新的全日曆,所以我真的不確定在哪裏打破我的問題的代碼。可以全日曆創建一個多日事件作爲單獨的事件(事件peppers)每天

首先,全日曆是偉大的,哇什麼節省時間,偉大的工作! 其次,我使用保羅的修改版本的荷蘭人: 這裏下載:http://www.paulthedutchman.nl/portfolio/?mi=113

我需要看到多日的事件,多個事件在那些日子裏,而不是在默認情況下,周視圖,其中多天事件跨越事件設置日期的列高度。

最好把它想成這樣。 3天的工作是3個工作班次不同的細節。(..但真正的三個事件全日曆)

MON:1 of 3 | TUE:2/3 | WED:3之3

  • 我不需要ID來堅持事件「件」,它們實際上是分開的事件。
  • 我只是試圖幫助用戶在創建新事件時設置多個工作班次
  • 爲什麼? =用戶可以有三個連續的工作days..but那麼一個班次/隊被感動,這就是爲什麼默認的事件行爲(和獨立的ID)是最好的解決辦法

我想象中的簡單的東西在服務器端代碼爲的addEvent函數會:

  1. 檢查開始結束日期,減去差值
  2. PHP的「而」 $ I < =日期DIFF - 創建單獨的事件,只有名稱被傳遞

    $ck_str= date("d",$frm_submitted['date_start']); 
    $ck_end= date("d",$frm_submitted['date_end']); <br/> 
    
    if($ck_str != $ck_end){ // are the day the same? if not do this 
    
    $ck_diff = $ck_end - $ck_str; // subtract days for events needed 
    $i = 1; 
    while ($i <= $ck_diff) { 
    // add event or modify array if already inside the add function 
    // customize the name "Day1: Job Name" 
    
    }} 
    

最終結果,對具有相同名稱的

創建多事件可能不會是簡單?

這裏是保羅修改日曆的功能的addEvent:

function addEvent() { 

global $error; 

$arr_submit   = array(
    array('cal_id',   'int',   false, ''), 
    array('color',   'varchar',  false, ''), 
    array('date_end',  'int',   false, ''), 
    array('date_start',  'int',   false, ''), 
    array('title',   'varchar',  false, ''), 
    array('location',  'varchar',  false, ''), 
    array('description', 'varchar',  false, ''), 
    array('cal_type',  'varchar',  false, ''), 
    array('interval',  'varchar',  false, ''), 
    array('weekdays',  'varchar',  false, ''), 
    array('monthday',  'varchar',  false, ''), 
); 

$frm_submitted  = validate_var($arr_submit); 
    $frm_submitted['title'] = stripslashes($frm_submitted['title']); 
    $frm_submitted['cal_id'] = 1; // for this test there is only one calendar 

// time offset 
$frm_submitted['date_start'] -= TIME_OFFSET; 
if(empty($frm_submitted['date_end'])) { 
    $frm_submitted['date_end'] = $frm_submitted['date_start']; 
} else { 
    $frm_submitted['date_end'] -= TIME_OFFSET; 
} 
if($frm_submitted['title'] == 'undefined') { 
    echo json_encode(array('success'=>false));exit; 
} 

//if(USE_CALENDAR_COLOR_FOR_EVENT) { 
if(empty($frm_submitted['color']) || $frm_submitted['color'] == 'undefined') { 
    $frm_submitted['color'] = Calendar::getColor($frm_submitted['cal_id']); 
} 
//} 
if(empty($error)) { 

    // check if repeating event 
    if(isset($frm_submitted['interval']) && ($frm_submitted['interval'] == 'W' || 
       $frm_submitted['interval'] == '2W' || 
       $frm_submitted['interval'] == 'M' || 
       $frm_submitted['interval'] == 'Y')) { 
     // weekday 

     $arr_days = Utils::getDaysInPattern($frm_submitted); 
     $arr_event = Events::insertRepeatingEvent($arr_days, $frm_submitted); 

     echo json_encode(array('success'=>true));exit; 
    } else { 
     // check if this calendar allows overlapping 
     //if(!CalendarOwners::allowOverlapping($frm_submitted['cal_id'])) { 
      if(Events::isTimeAvailable($frm_submitted) || $frm_submitted['date_end'] != $frm_submitted['date_start']) { 
       $arr_event = Events::insertEvent($frm_submitted); 
       echo json_encode(array('success'=>true, 'event'=>$arr_event));exit; 
      } else { 
       echo json_encode(array('success'=>false, 'error'=>'Overlapping'));exit; 
      } 
     //} else { 
      //$arr_event = Events::insertEvent($frm_submitted); 
      //echo json_encode(array('success'=>true, 'event'=>$arr_event ));exit; 
     //} 
    } 
} 
echo json_encode(array('success'=>false));exit; 
} 
+0

你們是不是要複製某種形式的事件再次發生呢?即用戶可以定期重現一個事件,然後根據需要單獨更改各個事件的特徵? – karancan 2013-05-11 20:22:20

+0

我認爲這個請求最簡單的形式是...我希望用戶創建1個事件,但是當它運行時,它將分裂成具有相同名稱的日子。我想它可能會像經常性的連續幾天而不是幾周或幾個月? ......這將涉及什麼? – zzipper72 2013-05-11 20:29:50

回答

0

我對事件的再次發生類似的需求,並建立在提供什麼完整的日曆上面我自己的邏輯。在用戶界面上,當用戶添加新事件時,我允許他們指定他們是否希望事件成爲重複事件。如果是的話,我給他們選擇了「每日」,「每週」,「每月」等。如果他們選擇「每日」,我會問:「多少天?

我將描述我在PHP /僞代碼中所做的工作,因爲每個人都有其獨特的實現這樣的功能。

然後,我會照常添加原始事件。如果,event_recurring = TRUE,則:

$appointment_start; // The original start time of the original event 
$appointment_end; // The original end time of the original event 
$max_recurence; // The number of days the user wants to recur 

if ($max_recurence < $today) // Skip 
else { 
    // If frequency == DAILY , other options can be weekly, monthly 

    $event_recur_counter = $original_event_start + 1; 
    while ($event_recur_counter < $max_recurence){ 

     $appointment_start = $appointment_start + 1; 
     $appointment_end = $appointment_end + 1; 

     //Insert the new event (everything else apart from start and end time is the same 

     $event_recur_counter = $original_event_start + 1; 


} 

就像我說的,有做這樣的事的幾種方法,但是這是基本的想法。你會有多個事件,他們之間唯一不同的是他們的開始和結束時間。從那裏開始,您可以爲每個事件單獨編輯一些內容,而不會影響其他任何事件。

希望這會有所幫助。

+0

我認爲這是一個很好的解決方案,我沒有想過每天都會重複發生,所以我們很有趣,我們如何專注於某些項目並且想念這樣的事情......我真的很感激它! – zzipper72 2013-05-11 22:15:07

+0

你有沒有發佈某個地方的版本以供審覈,我又是新來的FullCal,所以它很難讓我「連接點」,在這兩種情況下..再次感謝! – zzipper72 2013-05-11 22:20:16

+0

我已經爲FullCalendar構建了一大堆擴展,但從未真正發佈過它們 – karancan 2013-05-12 03:51:47