2017-01-18 194 views
1

我有以下工作日曆頁面(lqCalendar.cfm),它將MySQL中的事件放到日曆中。將彩色事件添加到日曆

<html> 
<head> 
<link rel="stylesheet" href="../fullcalendar-3.1.0/fullcalendar.min.css" /> 
<script src="../fullcalendar-3.1.0/lib/jquery.min.js"></script> 
<script src="../fullcalendar-3.1.0/lib/moment.min.js"></script> 
<script src="../fullcalendar-3.1.0/fullcalendar.min.js"></script> 

<script> 
$(document).ready(function() { 

    var date = new Date(); 
    var d = date.getDate(); 
    var m = date.getMonth(); 
    var y = date.getFullYear(); 

    var calendar = $('#calendar').fullCalendar({ 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 
     selectable: true, 
     selectHelper: true, 
     select: function(start, end, allDay) { 
      var title = prompt('Event Title:'); 
      if (title) { 
       calendar.fullCalendar('renderEvent', 
        { 
         title: title, 
         start: start, 
         end: end, 
         allDay: allDay 
        }, 
        true // make the event "stick" 
       ); 
      } 
      calendar.fullCalendar('unselect'); 
     }, 
     editable: true, 
     events: "getLeaveRequests.cfc?method=getMyData", 
     eventDrop: function(event, delta) { 
      alert(event.title + ' was moved ' + delta + ' days\n' + 
       '(should probably update your database)'); 
     }   
    }); 

}); 
</script> 
</head> 
<body> 
<div id='calendar'> 
</div> 
</body> 
</html> 

這是我的工作CFC(getLeaveRequests.cfc)的查詢數據:

<!--- Don't forget to VAR scope all local variables. ---> 
    <cfset var getEvents = ""> 
    <cfset var row = ""> 
    <cfset var result = ""> 

    <cfquery name="getEvents" datasource="care"> 
     SELECT lqID AS id, 
      lqStartDate AS myStart, 
      lqEndDate AS myEnd, 
      CONCAT(lqUser, " (",lqTotalHours,") ", (COALESCE(lqDescription,'')),"") AS title 
     FROM tblleaverequest 
    </cfquery> 

    <cfset result = []> 
    <cfloop query="getEvents"> 
     <!--- start new structure. must use array notation to preserve case of structure keys---> 
     <cfset row = {}> 
     <cfset eventurl ="leave_request_a01z.cfm?id=" & "id"> 
     <cfset row["id"] = id> 
     <cfset row["title"] = title> 
     <cfset row["start"] = myStart> 
     <cfset row["end"] = myEnd> 

     <!--- append to results ---> 
     <cfset arrayAppend(result, row)> 
    </cfloop> 

    <!--- convert to json ---> 
    <cfreturn serializeJSON(result)> 

    <!--- 
    <cfreturn getEvents> 
    ---> 
</cffunction> 
</cfcomponent> 

什麼是最好的方式,以 「顏色」 日曆基於價值的物品「lqUser」? - 可以動態分配顏色,或者如果需要,我可以爲每個用戶添加一個顏色字段到用戶表,但是如何將它分配給FullCalendar?

這裏是我的更新CFC試圖讓顏色的工作:(使用從雷蒙德卡姆登網站「德韋恩·安德森」郵編) - 我添加一個字段,我稱之爲「CATEGORY_ID」用戶表,然後分配值1通9的顏色。 該頁面給我沒有錯誤,只是一個空白的日曆?

<!--- Component to get all of the Leave Request Dates and place on FullCalendar page---> 
<cfcomponent> 
<cfsetting showDebugOutput='No'> 
<cffunction name="getMyData" output="false" access="remote" returntype="any" returnformat="JSON"> 
     <cfargument name="filter" type="string" required="no" default=""> 

<cfquery name="getallevents" datasource="care"> 
SELECT lqID AS id, 
       lqStartDate AS event_start_datetime, 
       lqEndDate AS event_end_datetime, 
       IF(category_id IS NULL, '1', category_id) AS color_id, 
       CONCAT(lqUser, " (",lqTotalHours,") ", (COALESCE(lqDescription,'')),"") AS title 
FROM  tblusers RIGHT OUTER JOIN tblleaverequest ON tblusers.username = tblleaverequest.lqUser 
</cfquery> 

<cfquery name="getallcolors" dbtype="query"> 
Select distinct color_id 
from getallevents 
</cfquery> 

<cfset colorlist="red,green,blue,yellow,black,brown,aqua,orange,darkred"> 
<cfset colorpos=1> 
<cfset colors = []> 

<cfloop query = "getallcolors"> 
<cfset thecolor='#listgetat(colorlist,colorpos)#'> 
<cfif colorpos eq listlen(colorlist)> 
<cfset colorpos=0> 
</cfif> 
<cfset colorpos=colorpos+1> 
<cfset colors[#color_id#] = thecolor> 
</cfloop> 

<cfset url.returnformat="json"> 
<cfset results = []> 
<cfloop query = "getallevents"> 
<cfset eventurl ="eventdetails.cfm?id=" & "id"> 
<cfset eventcolor ="#colors[color_id]#"> 
<cfset s = structnew()> 
<cfset s["id"] = id> 
<cfset s["title"] = title> 
<cfset s["start"] = getEpochTime(event_start_datetime)> 
<cfset s["end"] = getEpochTime(event_end_datetime)> 
<cfset s["url"] = eventurl> 
<cfset s["color"] = eventcolor> 
<cfset s["allDay"] = false> 
<cfset arrayappend(results, s)> 
</cfloop> 

<cfreturn results> 
</cffunction> 

<cffunction access="private" name="getEpochTime" returntype="date"> 
<cfargument name="thedatetime" type="date"/> 
<cfif (ArrayLen(Arguments) is 0)> 
<cfset thedatetime = Now() /> 
<cfelseif IsDate(Arguments[1])> 
<cfset thedatetime=Arguments[1] /> 
<cfelse> 
return NULL; 
</cfif> 
<cfreturn DateDiff("s", DateConvert("utc2Local", "January 1 1970 00:00"), thedatetime) /> 
</cffunction> 

</cfcomponent> 

回答

1

什麼是最好的方式,以「色」的基礎上「lqUser」的值的日曆項目? 如果我正確理解這一點,您有兩個選擇。

  1. 你可以設置顏色在查詢本身的用戶,以便其更容易在查詢級別管理通過案例statments或任何其他邏輯

  2. 你可以做分度類特定用戶或類型的用戶。

HTH。

+0

啊,我正在嘗試你的選項#1,看到我上面更新的CFC。我更新了試圖讓顏色起作用的CFC(使用Raymond Camden網站上的「dwayne anderson」帖子中的代碼),但現在只是給我一個空白日曆?有任何想法嗎? – jlig

0

得到它的工作!這是最後的&正在運行的CFC,其中包括着色日曆事件。謝謝您的幫助。

<!--- Component to get all of the Leave Request Dates and place on FullCalendar page---> 
<cfcomponent> 
    <cfsetting showDebugOutput='No'> 

    <cffunction name="getMyData" output="false" access="remote" returntype="any" returnformat="JSON"> 
     <cfargument name="filter" type="string" required="no" default=""> 

     <!--- Don't forget to VAR scope all local variables. ---> 
     <cfset var getEvents = ""> 
     <cfset var row = ""> 
     <cfset var result = ""> 
     <cfset var getallcolors = ""> 

     <!--- Query the Leave Requests table and get data for all employees ---> 
     <cfquery name="getEvents" datasource="care"> 
     SELECT lqID AS id, 
       lqStartDate AS myStart, 
       lqEndDate AS myEnd, 
       IF(category_id IS NULL, "", category_id) AS color_id, 
       CONCAT(lqUser, " (",lqTotalHours,") ", (COALESCE(lqDescription,'')),"") AS title 
     FROM  tblusers RIGHT OUTER JOIN tblleaverequest ON tblusers.username = tblleaverequest.lqUser 
     </cfquery> 

     <!--- Do a Query of Queries to get all of the users color values ---> 
     <cfquery name="getallcolors" dbtype="query"> 
     Select distinct color_id 
     FROM getEvents 
     </cfquery> 

     <cfset result = []> 
     <!--- Assign colors to be used by the FullCalendar variable ---> 
     <cfset colorlist="red,green,blue,black,gray,brown,orange,darkred,darkgreen,darkblue,darkgrey,purple,darkorange,"> 
     <cfset colorpos=1> 
     <cfset colors = []> 

     <cfloop query = "getallcolors"> 
     <cfset thecolor='#listgetat(colorlist,colorpos)#'> 
     <cfif colorpos eq listlen(colorlist)> 
     <cfset colorpos=0> 
     </cfif> 
     <cfset colorpos=colorpos+1>  
     <cfset colors[#color_id#] = thecolor> 
     </cfloop> 




     <cfloop query="getEvents"> 
      <!--- start new structure. must use array notation to preserve case of structure keys---> 
      <cfset row = {}> 
      <cfset eventcolor ="#colors[color_id]#"> 
      <cfset eventurl ="leave_request_a01z.cfm?id=" & "id"> 
      <cfset row["id"] = id> 
      <cfset row["title"] = title> 
      <cfset row["start"] = myStart> 
      <cfset row["end"] = myEnd> 
      <cfset row["color"] = eventcolor> 
      <!--- append to results ---> 
      <cfset arrayAppend(result, row)> 
     </cfloop> 

     <!--- convert to json ---> 
     <cfreturn serializeJSON(result)> 

     <!--- 
     <cfreturn getEvents> 
     ---> 
    </cffunction> 
</cfcomponent>