Einrichtung vom Kalender "Calendar Base" (cal)

Die wohl beste Kalender-Extension ist Calendar Base (cal) von Mario Matzulla. Sie bietet alles, was man für die Darstellung eines Kalenders und den Terminen benötigt, und darüber hinaus noch viele Extras.

Seit Kurzem wird Calendar Base auch von der ECT (Extension-Coordination-Team) unterstützt, so das Calendar Base auf dem besten Weg ist, die offizielle Typo3 Kalender-Extension zu werden.

Dieses Tutorial beruht auf der Version 0.12.0
Ein Wiki zum Kalender gibt es hier - dort ist auch ein Bugtracker, Source-Viewing und vieles andere Nützliche rund um den Kalender. Die aktuellste Version ist im SVN erhältlich.

Hier gehts zum Online-Beispiel 

[Da hier immer die aktuellste Entwicklerversion aufgespielt wird, kann es durchaus zu Unregelmässigkeiten kommen, Es dient uns auch zur Überprüfung der Funktionen]

Installation und Einrichtung

Als erstes installieren wir die Extension im Extensionmanager, wir akzeptieren die vorgeschlagenden Einstellungen und klicken auf Update.

Nun wollen wir unsere Daten vorbereiten. Wir erzeugen einen Sysordner für die Kalenderdaten. Wir wechseln zur Listenansicht und klicken auf "Neuen Datensatz anlegen". Wir erhalten folgende Auswahl:

  • Kalender (Ausnahme) Event - das ist ein (Ausnahme) Termin
  • Calendar - das ist ein einzelner Kalender
  • Kalender Kategorie - das sind die Kategorien
  • Kalender Ausnahme Eventgruppe -
  • Kalender Ort - alle vordefinierten Veranstaltungsorte
  • Kalender Organisation - alle vordefinierten Veranstalter

Das es die Datensätze Calendar gibt, hat den Grund, das wir z.B. einen öffentlichen Kalender haben, und dann einen Kalender, der einer FE-Usergruppe zugeordnet ist. Loggt sich ein User dieser Gruppe ein, so werden diese Kalenderdaten sichtbar. Theoretisch ist es also möglich, beliebig viele Kalender parallel zu betreiben.

Wir wollen einen öffentlichen Kalender erstellen und legen also einen Datensatz vom Typ Calendar an. Wir vergeben einen Titel und speichern ihn. Wir sehen auch, das wir unter Owner eine Benutzergruppe festlegen können. Wählen wir keine aus, so ist der Kalender öffentlich.

Veranstaltungsort
Veranstaltung Organisator

Da wir häufig wiederkehrende Veranstaltungsorte und Veranstalter haben, legen wir diese auch gleich an und nehmen so viele Details wie möglich mit auf.

Nun legen wir eine Kategorie an. Da wir einige Konzerte darstellen wollen, nennen wir die Kategorie Konzerte. Als Headerstil tragen wir konzert-h und als Bodystil konzert-b ein. Das sind die CSS-Auszeichnungen, die wir für das CSS-Design gebrauchen können. Wir speichern die Kategorie ab.

Es gibt default-Stile, die im mitgelieferten CSS bereits formatiert sind:

default_catheader
green_catheader
orange_ccatheader
pink_catheader
red_catheader
yellow_catheader
grey_catheader

Nun sind wir soweit, das wir einen Termin anlegen können. Wir legen einen Datensatz vom Typ Kalender Event an und tragen unsere Details ein. Wir müssen darauf achten, das wir einen Kalender auswählen. Ort und Veranstalter übernehmen wir aus der Liste oder tragen es ein.

Wichtig:
Wenn ein Anfangsdatum eingegeben wurde, muss ein Enddatum eingegeben werden.
Wenn eine Anfangszeit eingegeben wurde, muss eine Endzeit angegeben werden.

Geben wir keine Uhrzeiten an, so gilt der Termin als allday.

Anzeige

Wir wollen jetzt wir den Kalender in unsere Seite integrieren. Als erstes kopieren wir alle Templates aus typo3conf/ext/cal/template nach fileadmin/templates/cal, um sie später bearbeiten zu können. Für den Anfang arbeiten wir mit den mitgelieferten Templates.

Als erstes wechseln wir ins root-Template und fügen unter Include static (from extensions) die 2 Einträge hinzu (siehe Bild rechts).

Wir gehen auf die Seite, wo der Kalender angezeigt werden soll und fügen Ein Inhaltselement vom Typ Kalender ein. Dort geben wir dem Kalender einen Namen - dieser wird oben angezeigt. Als Ausgangspunkt wählen wir unseren Sysordner mit den Kalendereinträgen. Wir speichern und betrachten das Ergebnis im Frontend und sollten folgende Ausgabe bekommen:

Hier noch einige Tipps für Termine Fallstudien):

Wollen wir einen mehrtägigen Termin eingeben
Wir geben Anfangs- und Enddatum ein (optional Anfangs- und Endzeit).

Wir haben einen mehrtägigen Termin, der jeden Monat stattfindet
Wir geben Anfangs- und Enddatum ein, wechseln auf den Reiter Recurrence, wählen als Frequenz Monthly.
Soll der Termin 4mal stattfinden, tragen wir bei Anzahl 4 ein. Alternativ können wir auch das Enddatum eintragen. 

,

Bei Frequenz haben wir mehrere Möglichkeiten der Definition. So können wir die Wochentage angeben (mo,tu,we,th,fr,sa,su). Es ist auch möglich, den jeweils 3. Freitag des Monats zu wählen, dazu gibt man 3fr ein.
Mit Intervall können wir den Abstand gemäss der ausgewählten Frequenz eingeben. Beispielsweise geben wir als Frequenz Weekly an und wählen als Intervall 2. Nun findet der Termin alle 2 Wochen statt.

Ausnahmeevents - das sind Events, die man als Ausnahme definieren kann. Wir erzeugen z.B. ein Ausnahmeevent Feiertage und können bei mehrtägigen Terminen diese Feiertage als Ausnahmeevent hinzufügen. Der Termin wird nun an einem Feiertag unterbrochen.

Spezialelemente

Wir möchten einen statischen Minikalender und eine statische Liste mit den Terminen des aktuellen Monats auf der linken Seite angezeigt bekommen. Hierzu benötigen wir 2 Templates und ein bischen Typoscript. Die beiden Elemente können dann beliebig platziert werden. Hier der benötigte Code:

TypoScript
lib.minical >
lib.minical < plugin.tx_cal_controller
lib.minical {
	pages = PID_DES_SYSFOLDERS
	view {
		defaultView = month 
		month.monthTemplate = fileadmin/templates/cal/monthmini.tmpl
		calendar.defaultUid = PID_DES_SYSFOLDERS
		isStatic = 1
		day.dayViewPid = PID_DER_KALENDERSEITE/TAGESANSICHT
		weekStartDay = Sunday
	}	
}

lib.minicallist >
lib.minicallist < plugin.tx_cal_controller
lib.minicallist {
	pages = PID_DES_SYSFOLDERS
	view {
		defaultView = list
		list.listTemplate = fileadmin/templates/cal/monthteaser.tmpl		
		calendar.defaultUid = PID_DES_SYSFOLDERS
		isStatic = 1
		event.eventViewPid = PID_DER_KALENDERSEITE/EVENTANSICHT
		weekStartDay = Sunday
	}	
}
die Templates monthmini.tmpl und monthteaser.tmpl
<!-- monthmini.tmpl -->
<div id="minical" align="center">###MONTH_SMALL|+0### </div>
 
 
<!-- monthteaser.tmpl -->
<dl id="calteaser">
	<!-- ###SHOWBOTTOMEVENTS### start -->
	<!-- ###SHOWBOTTOMEVENTS_ODD### start -->
	<dt class="odd">###DAYLINK###<span class="V9G">###START_TIME###</span></dt>
	
	<dd class="odd">###EVENT_TEXT###</dd>
 
	
	<!-- ###SHOWBOTTOMEVENTS_ODD### end -->
	<!-- ###SHOWBOTTOMEVENTS_EVEN### start -->
	<dt class="even">###DAYLINK###<span class="V9G">###START_TIME###</span></dt>
	
	<dd class="even">###EVENT_TEXT###</dd>
	<!-- ###SHOWBOTTOMEVENTS_EVEN### end -->
	<!-- ###SHOWBOTTOMEVENTS### end -->
</dl>

FE-Edit

Der Kalender erlaubt es, das FE-User im Frontend neue Termine eingeben können, sowie bestehende Termine editieren können. Dies ist entweder über die ID's der User oder über ID's von Usergruppen einstellbar.

Hierzu legen wir eine Usergruppe an, die diese Möglichkeit bekommen sollen.
Unsere Usergruppe heisst calendar und hat die ID 3. Wir erstellen einen User und geben ihm die Gruppe calendar.

Nun wollen wir der Usergruppe mit der ID 3 das editieren erlauben, dazu benötigen wir ein bischen Typoscript:

TypoScript
plugin.tx_cal_controller {
	rights {
		edit = 1
		admin.group = 3
	}
}

mit edit=1 erlaubt man generell das Editieren, über admin.group wird die Gruppe zugewiesen. Hier kann man auch eine Kommaliste der gewünschten Gruppen angeben. Möchte man das auf Userebene, so greift die Anweisung
admin.user = ...

Im Online-Beispiel habe ich einen Admin-User angelegt, wer sich also das FE-Editing anschauen will, kann das mit dem user calendar / calendar tun.

Wie der Name schon sagt, hat admin die vollen Rechte. Möchte na z.B. einer Gruppe nur das Anlegen neuer Termine erlauben, so erreicht man das mit folgender Einstellung:

TypoScript
plugin.tx_cal_controller {
	rights {
		edit = 1
		create.event.enableAllFields.group = 3
	}
}

Wenn man alle Einstellungen feiner gestalten möchte, so empfiehlt sich, die komplette  setup.txt  ins TS zu übernehmen und entsprechend anzupassen.

Helfer

Um leichter Datumsangaben zu tätigen, empfiehlt sich die Extension Date2Calendar (erotea_date2cal), für die FE-Eingaben wird die Extension Date selector library (rlmp_dateselectlib) benötigt.

Realurl

Calendar base lässt sich auch mit realurl konfigurieren. Hierzu muss man nur folgenden Code in die postVarSets-Konfiguration in der localconf.php:

PHP
'cal'=> array(
	array(
		'GETvar' => 'tx_cal_controller[view]'
	),
	array(
		'GETvar' => 'tx_cal_controller[getdate]'
	),
	array(
		'GETvar' => 'tx_cal_controller[gettime]'
	),
	array(
		'GETvar' => 'tx_cal_controller[lastview]'
	),
	array(
		'GETvar' => 'tx_cal_controller[type]'
	),
	
	array(
		'GETvar' => 'tx_cal_controller[category]',
		'lookUpTable' => array(
			'table' => 'tx_cal_category',
			'id_field' => 'uid',
			'alias_field' => 'title',
			'addWhereClause'  => ' AND NOT deleted',
			'useUniqueCache' => 1,
			'useUniqueCache_conf' => array(
				'strtolower' => 1,
				'spaceCharacter' => '_',
			 ),
		 
		),
	),
	array(
		'GETvar' => 'tx_cal_controller[uid]',
		'lookUpTable' => array(
			'table' => 'tx_cal_event',
			'id_field' => 'uid',
			'alias_field' => 'title',
			'addWhereClause'  => ' AND NOT deleted',
			'useUniqueCache' => 1,
			'useUniqueCache_conf' => array(
				'strtolower' => 1,
				'spaceCharacter' => '_',
			),
		),
	),
	array(
		'GETvar' => 'tx_cal_controller[gettime]'
	),
	array(
		'GETvar' => 'tx_cal_controller[preview]'
	),
	
),

SimulateStaticDocuments

Für eine Konfiguration mit simulateStaticDocuments kann folgender Code verwendet werden (incl. tt_news-Konfiguration)

TypoScript
simulateStaticDocuments_noTypeIfNoTitle =1
simulateStaticDocuments_pEnc = md5
simulateStaticDocuments_pEnc_onlyP = cHash,L,no_cache,tx_indexedsearch[ext],tx_ttnews[backPid], tx_ttnews[tt_news], tx_ttnews[pS], tx_ttnews[pL], tx_ttnews[arc], tx_ttnews[cat], tx_ttnews[pointer], tx_ttnews[swords], tx_cal_controller[view], tx_cal_controller[getdate], tx_cal_controller[lastview], tx_cal_controller[type], tx_cal_controller[category], tx_cal_controller[uid], tx_cal_controller[gettime], tx_cal_controller[preview]
simulateStaticDocuments_addTitle = 35

MINIFAQ

Warum werden meine Events nicht angezeigt ?
Ein häufiger Fehler, wenn man vergisst Enddatum einzugeben. Gibt man eine Anfangszeit ein, muss auch eine Endzeit eingegeben werden

Was läuft schief ? Ich habe tt_address für Orte und/oder Veranstalter eingetragen
tt_address muss vor cal installiert werden, da sonst u.U. tt_address nicht vollständig ist (z.B. das Feld uid fehlt)

Beim FE-Create werden die Events als hidden abgespeichert. Wie kann ich das umstellen ?
plugin.tx_cal_controller.rights.create.event.fields.allowedToCreateHidden.default = 0

 

639 Kommentare
#566 Sascha schrieb am 01.12.2009 08:14

hi.

 

ich habe folgendes Problem. Ich nutze CalendarBase in der Version 1.2 und register4cal in der Version 0.4.2. Hier funktionieren aber die Anmeldeschaltflächen für events auch nicht obwohl die Anmeldung für dieses Event aktiviert ist. kann mir jemand helfen???

#587 Thomas schrieb am 06.05.2010 12:49

Hallo, Du musst die Marker entsprechend der Anleitung setzen.

#589 Katharina schrieb am 10.05.2010 15:12

In der Detailview vom Event möchte ich nicht nur den Namen der Location, sondern auch die Adresse angeben. Dazu muß der Marker ###MODULE__LOCATIONLOADER### an die gewünschte Stelle in der Datei event_model.tmpl gesetzt werden. Soweit so gut.

 

Problem daran ist:

 

Die Anmeldemaske für den Event taucht jetzt zweimal auf. Einmal ganz unten auf der Detailseite, so wie es auch sein soll. Aber das zweite Mal direkt unter der Adressangabe der Location.

 

Wie bekomme ich die weg?

 

Danke und Gruß,

Katharina

#588 Thomas schrieb am 06.05.2010 12:49

Hallo, Du musst die Marker entsprechend der Anleitung setzen.

#564 Olli schrieb am 12.11.2009 16:47

Hallo,

ich habe schon ein paar Erfahrungen mit der Extension gesammelt, allerdings bin ich mir gerade nicht sicher, ob ich damit folgendes Vorhaben lösen kann. Ich soll einen Minikalender einfügen, bei dem onmouseover beim Tag die Ereignisse des Tages dargestellt werden. Beispiel siehe: www.dav-hamburg.de

Ich habe schon diverse Foren abgesucht, werde aber nicht fündig. Würde mich sehr über einen Tipp freuen. Vielen Dank!

#562 Chris schrieb am 08.11.2009 15:23

Ich habe bisher nur ein Mischmasch aus Englisch und Deutsch herausbekommen. Die Monatsübersicht wird in Englisch gezeigt - wenn man auf das Ereignis klickt, kommt jedoch deutsch (Titel, Startdatum, Startzeit...usw.). Natürlich habe ich config gesetzt (in allen Varianten) - nützt alles nichts. Ich glaube mit der Extension stimmt etwas nicht... macht jemand die gleichen Erfahrungen? Grüsse Chris

#560 Ulf schrieb am 25.10.2009 16:52

Hey,

 

ich habe den Kalender soweit im Backend eingerichtet, KalenderKategorien, -Ort und -Organisationen angelegt. Erstelle ich nun ein KalenderEvent, wird es im Kalender und im MiniKalender zwar angezeigt, jedoch wird der Termin nicht mit den angegebenen Links bzw. der Beschreibung des Termins hinterlegt. Schlicht: Man kann ihn nicht anklicken. Darüber hinaus greifen die Termine schreinbar nicht auf den Teil des Kalenders zu, indem festgelegt wurde, welche Farbe die Termine haben sollen,obwohl dies unter dem Reiter Kategorie ausgewählt wurde. Wenn das noch nicht genug ist, kann mir vielleicht einer mal erklären, warum im Frontend bei den Uhrzeiten des Termins plötzlich "am" und "pm" auftaucht und wie man das ggf. ändern kann? Danke schon mal im Vorraus! (Verwende Version 1.2.0)

#561 Ingo schrieb am 26.10.2009 16:29

Für 24h Zeitangaben bitte unter Template->Seite mit dem Calendar->Info/Modify->Constants einfügen

 

# Datumformat fuer den Calendar

plugin.tx_cal_controller.view.dateFormat = %e. %B %Y

plugin.tx_cal_controller.view.timeFormat = %H:%M

#559 Viktor schrieb am 21.10.2009 15:03

Sehr schön erklärt finde ich, funktioniert auch alles, ausser dass die Beschreibung der events nicht angezeigt werden.

Ist es normal das die Events die z. B. über eine Stunde gehen, 1:15 im Kalenderzeit abdecken?

Version cal 1.1.0

Jemand ne Idee?

#557 major0190 schrieb am 01.10.2009 21:49

Hallo,

 

setze bei mir auch die CAL-Extension ein und funktioniert auch ohne Probleme. Ich habe für jedes Jahr einen eigenen Sysfolder angelegt. Bei mir fangen die Termine aber nicht am 1. Januar an, sondern im September (Eishockey-Saison).

 

Jetzt meine Frage: Ich möchte die alten Kalenderjahre als Archiv anzeigen - wie bekomme ich das hin?

 

Vielen Dank für die Hilfe

vg, major0190

#555 Susanne schrieb am 16.09.2009 12:01

Hallo,

beim FE-editing funktioniert das bearbeiten der Kategorien nicht. Ich kann neue Kategorien anklicken aber keine löschen. Woran kann das liegen?

#565 Markus schrieb am 15.11.2009 22:39

Die Rechte hast Du aber richtig gesetzt? Also dass edit auch erlaubt ist? Denn es scheint so, als ob du nur das create erlaubt hättest...

#554 Basti schrieb am 15.09.2009 15:43

Nun muss ich doch einmal hier nach fragen.... Wie und was muss ich alles einstellen, damit der "cal" so funktioniert, dass man sich für ein Event anmelden kann!?!

 

Danke Euch!

#563 Markus schrieb am 10.11.2009 01:49

Für eine Anmeldefunktion braucht es eine zusätzliche Extension. Bei mir tut das register4cal. Aber Vorsicht: Wenn cal in Version 1.2 verwendet wird funktioniert reg4cal erst ab 0.4.2 richtig! 0.4.1. zeigt die Anmeldefenster und -schaltflächen nicht an!

#552 4auge schrieb am 27.08.2009 13:18

Hallo,

ich habe das Problem das Redakteure zwar Events im Back-End anlegen können, wenn ich in die Datenbank schaue haben diese Events allerdings die Kalender-ID 0 und nicht 1, obwohl ich den Kalender für die Redakteurs-Gruppe freigegeben habe.

 

Hat irgendjemand ne Idee?

#553 4auge schrieb am 27.08.2009 13:55

Problem gelöst.

 

Ich hatte "Kalender anlegen" für die Gruppe nicht aktiviert.

#556 Roland schrieb am 29.09.2009 17:49

Hallo 4auge, hallo allerseits,

 

hatte gerade das selbe Problem. Das Feld das du meinst heißt nicht "Kalender anlegen" sondern "Kalender Event: Kalender".

 

grüße Roland

#549 Werner schrieb am 05.08.2009 19:05

Hallo,

habe das Problem, dass ich bei einem "allday" Termin im Nachhinein mit dem FE-Editor nicht mehr auf eine Anfangs- und Endzeit ändern kann. Die Eingabe wird akzeptiert, aber die Datenbank wird nicht updated.

Danke

#550 Werner schrieb am 12.08.2009 21:37

Habe das Problem selbst lösen können.

Da der POST die Variable einer nicht gesetzten Checkbox nicht zurückliefert, wurde diese auch nie geändert. Ich hab in

model/class.tx_cal_phpicalendar_model.php in Zeile 83 folgenden Code hinzugefügt:

if($piVars['formCheck']=='1') {

$this->setAllday(false);

}

foreach($piVars as $key => ...

einen Kommentar schreiben
Typo3