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
#516 tobi schrieb am 20.10.2008 16:26

Hi,

 

ich habe folgendes problem beim FE-Editing von Events:

 

Ich habe 2 Kategorien angelegt, alle Rechte gesetzt, alle Views erlaubt. Soweit klappt auch alles ganz gut. Aber:

 

Wenn ich ein neues Event anlege und eine Kategorie auswähle (und natürlich alle anderen benötigten Felder korrekt ausfülle) und anschliessend speichere, funktioniert alles wie erwartet. Wenn ich allerdings im ConfirmView auf abbrechen drücke und dann im Formular die Kategorie ändere oder ein bestehendes Event editiere und die Kategorie ändern möchte, übernimmt er die Änderung einfach nicht.

 

ich verwende die 1.0.0 stable-version aus'm TER.

 

liegt das eventuell am caching der piVars (->class.tx_cal_base_model.php)?

 

freue mich über jede idee....

vielen dank,

 

tobi

#517 tobi schrieb am 20.10.2008 16:46

kleiner Nachtrag:

 

typo 4.2.1

 

 

create.event {

timeOffset = -43200

enableRTE = 0

saveEventToPid = {$calendarStoragePid}

group = {$calendarEditorGroupPid}

allowedToCreateEvents.group = {$calendarEditorGroupPid}

publicEvents.group = {$calendarEditorGroupPid}

startedEvents.group = {$calendarEditorGroupPid}

#onlyOwnEvents.group = {$calendarEditorGroupPid}

enableAllFields.group = {$calendarEditorGroupPid}

#enableAllFields.public = 1

 

fields.calendar_id.default = {$calendarDefaultCalenderPid}

 

fields.category.required = 1

 

fields.start.constrain.2 >

fields.end.constrain.2 >

 

}

#514 Reimemonster schrieb am 30.09.2008 11:42

Hallo, dies ist eine super Extension. hab nur das Problem das vor meinem Eventtitel immer "Titel:" erscheint.

 

Über meinem Bild steht immer "Bild".

 

Wie kann man das weglöschen?

#513 Jan schrieb am 16.09.2008 13:35

Erstmal vielen Dank für dieses Tutorial für CAL BASE, das mir bei der Einrichtung des Kalenders sehr geholfen hat. Listen- und Terminansicht funktionieren auch sehr gut, nur sobald ich die Miniansicht einbinde, bricht die Performance total ein. Es wird alles dargestellt, dauert aber 30.000 ms und länger. Kennt jmd. das Problem oder sieht einen 'dummen' Fehler in meinem TS?

Meine Daten: Typo3 4.2.0, CAL 1.0.0

Minikalenderaufruf im Setup über Basistemplate mit

marks.CALENDAR < lib.minical

 

Mein Basistemplate:

lib.minical >

lib.minical = COA

lib.minical {

10 < plugin.tx_cal_controller

10 {

pages = 108

pidList = 108

view {

defaultView = month

allowedViews = month

month.monthTemplate = fileadmin/templates/cal/template/monthmini.tmpl

calendar.defaultUid = 108

isStatic = 1

day.dayViewPid = 111

weekStartDay = Monday

dayLinkTarget = list

list.listViewPid = 110

month.monthViewPid = 112

event.eventViewPid = 109

}

}

}

 

Vielen Dank fürs Nachschauen.

#512 Ebert schrieb am 13.09.2008 16:42

Ich habe noch eine kleine Frage, wie kann ich das Template des Kalenders meiner Seite anpassen???? irgentwo muss es ja ein CSS oder so geben das man anpassen kann.

Besten Dank,

ich freu mich über jede Hilfe.

#511 Ebert schrieb am 13.09.2008 16:16

Alles geht bei mir, nur was ich mit den beiden Templats anfange??? ich habe keine arnung wie ich den Mini Kalender hinbekomme, ich habe 2 Dateien mit dem Templates erzeugt, aber wie bekomme ich sie in meine seite? Beim Erstellen habe ich in meinem Template den Platzhalter "Kalender" aber wie bekomme ich den miniKalener da rein?

#510 Andi schrieb am 04.09.2008 14:30

Hallo,

ich habe die aktuelle Typo 3 version mit YAML und TemplaVoila im Einsatz. Wie und wo muß ich den Sourcecode des Teasers für den Kalender einbauen? Wenn ich den Code in das Setup kopiere, wird die Seite nicht mehr angezeigt. Dafür erscheinen mysql-Fehler. Hat jemand einen Tip für mich?

#508 Philipp schrieb am 03.09.2008 22:11

Ich habe die minicallist eingebaut.

Es wird auch ein Event angezeigt, ich würde aber gerne alle zukünftigen Termine in der Liste sehen.

 

Mein TS sieht so aus:

lib.minicallist = COA

lib.minicallist.10 >

lib.minicallist.10 < plugin.tx_cal_controller

lib.minicallist {

10 {

pidList = 84

view {

event.eventViewPid = 123

allowedViews = list

defaultView = list

list.listTemplate = fileadmin/templates/cal/minicallist.tmpl

calendar.defaultUid = 84

isStatic = 1

day.dayViewPid = 86

weekStartDay = Monday

list.starttime = now

list.endtime = +12 month

list.dateFormat = %e. %b %Y

list{

date_stdWrap.strftime= %A %d. of %B %Y

subheader_stdWrap.crop = 20 | ... | 1

}

month.titleCrop = 35|..|1

}

}

}

 

Das template sieht so aus:

 

###FOUND###

<dl>

</dl>

 

Wer kann mir sagen, was ich falsch machen.

 

Danke schonmal

Gruß Phil

#509 Philipp schrieb am 03.09.2008 22:15

Das Template sieht natürlich so aus:

<!--list.tmpl-->

<!-- ###LIST_TEMPLATE### begin -->

###FOUND###

<!-- ###PRE_LIST_TEMPLATE### begin -->

<dl>

<!-- ###PRE_LIST_TEMPLATE### end -->

<!-- ###LIST### start -->

<!-- ###LIST### end -->

<!-- ###POST_LIST_TEMPLATE### begin -->

</dl>

<!-- ###POST_LIST_TEMPLATE### end -->

<!-- ###LIST_TEMPLATE### end -->

<!--/list.tmpl-->

#507 Thomas schrieb am 28.08.2008 16:15

Wie genau hast du die Breite geändert, blicke da nicht durch Sad

#506 heinz schrieb am 22.08.2008 19:54

hallo typo3 freunde

 

habe calandar base installiert und auch eine minical ansicht zum laufen gebracht. siehe adresse homepage

 

leider bekomme ich auf der minical-ansicht die liste für die nächsten 3 termine nicht hin. vermutlich ist es nur eine kleinigkeit! kann mir jemand helfen?

 

grüsse & dank

#500 Christian schrieb am 19.08.2008 22:52

Hallo zusammen!

Erst mal muss ich ein großes Lob aussprechen - 1.für dieses Tutorial und für die Seite generell. (Bin über die Suche nach Calendar Base Troubleshooting hierher gekommen)

 

Ich hab gerade die Calendar Base installiert - sowie die SK_Pagecomments. (sehr geil - btw)

 

Jetzt stellt sich die Frage ob es möglich ist diese extentsions gemeinsam so zu benutzen, dass es möglich ist bei jedem eingetragenen Event verschiedene Kommentare zu posten. Sprich - in der jeweiligen Single Eventansicht können die User ihre Meinung zu den Events posten.

 

 

Geht das irgendwie?! (bin grade mit meinem Latein am Ende!)

 

Danke,

lg

Christian

#501 Christian schrieb am 19.08.2008 22:55

add: es soll natürlich nicht so sein, dass alle Kommentare der einzelnen Events vermischt werden - das wär ja einfach zu lösen über das comments plugin als pagecontent element auf der single event subsite.

#502 steffen schrieb am 20.08.2008 15:29

klar geht das, mit bindToGETvar kann man ja eine beliebige Get-var an die Comments binden.

#503 Christian schrieb am 20.08.2008 17:56

- wie geht das genau?! thx

#504 Christian schrieb am 20.08.2008 23:34

Hab jetzt folgenden Code im TS Setup:

plugin.tx_skpagecomments_pi1.bindToGETvar = tx_cal[cal]

 

leider wird jetzt gar nichts mehr angezeigt...

#505 steffen schrieb am 21.08.2008 11:29

kein Wunder, dieser GET-Parameter existiert ja nicht

 

tx_cal_controller[uid]

einen Kommentar schreiben
Typo3