2017-01-18 3 views
1

Ich habe die folgende funktionierende Kalenderseite (lqCalendar.cfm), die Ereignisse von MySQL in den Kalender stellt.Hinzufügen von farbigen Ereignissen zum Kalender

<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> 

Hier ist mein Arbeits CFC (getLeaveRequests.cfc), die die Daten abfragt:

<!--- 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> 

Was die Kalendereinträge auf "Farbe" ist der beste Weg, basierend auf dem Wert von "lqUser"? - Die Farben können dynamisch zugewiesen werden, oder wenn nötig, kann ich der Benutzer Tabelle für jeden Benutzer ein Farbfeld hinzufügen, aber wie ordne ich es dem FullCalendar zu?

Hier ist meine aktualisierte CFC versuchen, Farben zu arbeiten: (mit Code aus "Dwayne Anderson" Post auf Raymond Camden Website) - Ich fügte ein Feld meiner Benutzer Tabelle namens "category_id", dann zugewiesen Werte 1 bis 9 für Farben. Die Seite gibt mir keine Fehler, nur ein leerer Kalender?

<!--- 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> 

Antwort

1

Was ist der beste Weg, um „Farbe“ die Kalenderelemente basierend auf dem Wert von „lqUser“? Sie haben zwei Möglichkeiten, wenn ich das richtig verstehe.

  1. Sie die Farbe für den Benutzer in der Abfrage selbst so ist es einfacher zu verwalten auf Abfrageebene über Fall statments oder eine andere Logik

  2. Sie könnten tun div mit Klassen für bestimmte Benutzer festlegen könnten oder Art des Benutzers.

HTH.

+0

ah, ich versuche Ihre Option # 1, siehe meine aktualisierte CFC oben. Ich habe das CFC aktualisiert, um Farben zum Laufen zu bringen: (mit Code von "dwayne anderson" -Post auf Raymond Camden), aber es gibt mir jetzt nur einen leeren Kalender? Irgendwelche Ideen? – jlig

0

Es funktioniert! Hier ist der abschließende & funktionierende CFC, der das Einfärben der Kalenderereignisse beinhaltet. Danke für die Hilfe.

<!--- 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> 
Verwandte Themen