2017-01-18 293 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>