Hallo in die Runde,
ich habe jetzt nochmal nach einer Lösung für die Farben gesucht. Das Ergebnis sieht bei mir so aus:
screenshot-development.domain.de 2016-12-26 22-36-36.png
Dabei sind mir noch diese Dinge aufgefallen:
1. Die fullcalendar-initialisierung enthält (unter anderem) noch nicht die beiden Optionen
Code:
slotLabelFormat: 'HH:mm',
timeFormat: 'HH:mm',
weil die noch fehlen, wird die Uhrzeit der Veranstaltungen (für den deutschen Sprachraum) etwas ungewöhnlich ausgegeben...
2. Irgendetwas stimmt noch nicht mit dem css vom fullcalendar. Auf den produktiven Sites, wo ich Martin Koziankas fullcalendar - und auch dort, wo ich den fullcalendar 3.0.1 auf dem Raspi ohne Contao verwende, überlappen die Termine nicht. Wie man im Screenshot sieht, verdecken sie sich dabei gegenseitig, wenn sie lange Titel haben...
3. Zu Testzwecken habe ich mal die eventSources auf einen Request pro Kalender umgestellt und meine Klasse zur Erzeugung der Feiertage einfach in classes\EventsExt implementiert. Das klappt auf Anhieb. Die Feiertage werden korrekt angezeigt (siehe screenshot). Dazu generiere ich ein zusätzliches Array ($arrSources[]) für das Template und ersetze damit im Template cal_fc_default.html5 folgendes
PHP-Code:
// Fullcalendar events
eventSources: [<?php foreach($this->eventSources as $eventSource) { echo $eventSource; } ?>],
das geht bestimmt noch eleganter mit implode()...
im ModuleFullcalendar.php Z.114ff. habe ich folgendes ergänzt
PHP-Code:
// Get the background and foreground colors of the calendars
foreach (array_merge($this->cal_calendar, $this->cal_holiday) as $cal) {
$objBG = $this->Database->prepare("select title, bg_color, fg_color from tl_calendar where id = ?")->limit(1)->execute($cal);
$this->calConf[$cal]['calendar'] = $objBG->title;
if ($objBG->bg_color) {
list($cssColor, $cssOpacity) = deserialize($objBG->bg_color);
if (!empty($cssColor)) {
$this->calConf[$cal]['background'] .= 'background-color:#' . $cssColor . ';';
$bgColor = $cssColor; # <- hier
}
if (!empty($cssOpacity)) {
$this->calConf[$cal]['background'] .= 'opacity:' . ($cssOpacity / 100) . ';';
}
}
if ($objBG->fg_color) {
list($cssColor, $cssOpacity) = deserialize($objBG->fg_color);
if (!empty($cssColor)) {
$this->calConf[$cal]['foreground'] .= 'color:#' . $cssColor . ';';
$fgColor = $cssColor; # <- hier
}
if (!empty($cssOpacity)) {
$this->calConf[$cal]['foreground'] .= 'opacity:' . ($cssOpacity / 100) . ';';
}
}
# ab hier
$rt = REQUEST_TOKEN;
$this->arrEventSources[] = "{
url: 'veranstaltungskalender.html',
type: 'POST',
data: {
type:'fetchEvents',
REQUEST_TOKEN: '$rt',
calID: '{$cal}', // <- hier
},
color: '#$bgColor',
textColor: '#$fgColor'
},";
}
dabei dem Request noch die calendarID $cal (meine {} sind hier überflüssig...) und die beiden Farben hinzugefügt (opacity habe ich übergangen, soll nur Testcode sein...). So wird jeder im Modul aktivierte Kalender als eigene eventSource behandelt. Somit kann man die Farben auf der Basis der Sources verwenden...
Schöne Feiertage!
Theo