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
#470 jonas schrieb am 15.05.2008 11:15

hallo nochmal,

 

wüßte gerne, wie und wo ich von der suche-grafik (submit-button im search-template) diesen wenig ansehlichen rahmen um die grafik abstellen kann. jemand einen tipp?

 

greets, jonas

#469 Peter schrieb am 14.05.2008 14:33

Hallo,

 

wie schaltet man in der Listenansicht ganz oben den Zeitraum und die Suchergebnisse ab.

 

 

Ich möchte nur die reinen Kalendereinträge in der Listenansicht darstellen.

 

Gruß

Peter

#468 jonas schrieb am 12.05.2008 11:36

hi, nachdem ich schon andere kalender ausprobiert hatte, benutze ich nun cal und dies erfüllt am ehesten meine anforderungen. so wie es aussieht reicht das platzieren eines einzigen plugins (search + list + event), sehr gut finde ich die wirklich komortablen suchmöglichkeiten, nach kategorie, stadt, oder datum, etc.

 

zu meiner frage: derzeit werden bei der ereigniss-ansicht u.a. angezeigt: organisator und stadt. nun würde ich zusätzlich sehr gerne noch die genaue adresse anzeigen lassen, straße, zipcode, evtl. telefonnummer und email der location. kann mir bitte jemand sagen wie ich das relaisieren kann? geht das mit tt_address, das dann fe_user im eingabeformular von cal eine adresse je event eingeben können und diese dann in der ereigniss-ansicht angezeigt wird?

 

hoffe ihr könnt mir weiterhelfen. grüße, jonas

#466 michael schrieb am 04.05.2008 13:19

Ich hab die Listen und Standardansicht nachgebaut, jedoch hab ich das probelm das bei dem Teaser unter die nächsten 3 Termine nichts angezeigt wird. Der Minikalender erscheint mit den jeweilligen Terminen.

Hat jemand eine Idee an welcher Stelle es hier hakt?

Ich bin für jeden Typ dankbar.

 

Michael

#467 Chris schrieb am 11.05.2008 21:13

Hi Michael,

 

genau dieses Problem habe ich auch, das Template wird für die Eventliste einfach nicht benutzt. Wenn ich den Eintrag für das Template auskommentiere werden die nächsten Events angezeigt, jedoch nicht übersichtlich. lib.minicallist {

pages = 20

view {

allowedViews = list

defaultView = list

#list.listTemplate = fileadmin/templates/cal/monthteaser.tmpl

calendar.defaultUid = 2

isStatic = 1

list.maxEvents = 3

list.listViewPid = 2

event.eventViewPid = 2

weekStartDay = Monday

}

}

 

Das Template "monthteaser.tmpl" hab ich mal bearbeitet und einen statischen Text hinzugefügt, der dann ja eigentlich im Quellcode auftauchen müsste. Was jedoch nicht passiert.

 

Außerdem musste ich die Zeile "allowedViews = list" einfügen da sonst der Fehler "Controller function not found:" erschien.

 

Hab ich da vielleicht ein konzenptionellen Fehler gemacht?

 

Vielen Dank für die Hilfe

#475 Björn schrieb am 28.05.2008 01:00

Hi,

das gleiche Problem habe ich auch. In der Miniliste bekomme ich lediglich die Bindestriche zwischen den Placeholdern angezeigt. Zudem wird auch die allgemeine Listenansicht nicht richtig CSS-formatiert dargestellt.

 

Kann hier jemand helfen, bin schon am verzweifeln...

 

Besten Dank schon mal

#465 benni schrieb am 02.05.2008 00:00

Hallo,

 

ich habe folgendes Problem und hoffe es kann mir jemand helfen:

Manche meiner Backend User können nur Calendar einträge einrichten, dann aber nicht mehr editieren. Bei ganz wenigen funktioniert es, ich kann aber relevanten Unterschiede zw. den User-Einstellungen finden. Auch wenn ich einen Backend-User kopieren, bei dem es funktioniert, klappt es dann mit der Kopie nicht mehr.

Hat einer eine Idee woran es liegen könnte?

 

Danke für die Hilfe!

#464 Alexander schrieb am 17.04.2008 16:48

Hallo,

Habe das Problem, das wenn ich einen Backenduser (kein admin) die Rechte gebe: Kalender und Kategorien anzulegen/editieren, er diese zwar anlegen kann aber nicht nutzen kann.

Beispiel: der Backenduser legt einen Kalender an, dann eine Kategorie die dann zu dem Kalender gehören soll. Doch kann er dieser Kategorie diesen Kalender nicht zuweisen, da es ihn nicht in der Wahlmöglichkeit angeboten wird.

Man muss als Admin jedesmal die Rechte für den Kalender oder die Kategorie dem User manuell unter Cal-Kontroller zuweisen und das ist doch richtig unangenehm, Zumindest wenn man viele BackendUser hat.

Das interessante dabei ist, dass es über das Frontend-Editing so funktioniert, dass nur alle Kalender, Kategorien und Events angezeigt werden die im Startingpoint enthalten sind.

 

Das andere Problem ist der, dass ich einen Globalen Kalender haben will, der natürlich von allen meinen Backenduser(keine Admins) zugegriffen werden soll. Sie sollen wenn möglich Kategorien darauf anlegen können. Das Problem besteht darin das dieser Kalender in einem Ordner enthalten ist der den Usern nicht zugänglich sein soll und somit sie ihn nicht einer Kategorie zuweisen können, bzw es auch nicht für Frontend zugänglich ist.

Ich vermute das sind Bugs

#461 Tim schrieb am 15.04.2008 08:37

Anderes Problem:

Wenn ich einer Gruppe möglichst wenig Rechte gebe, kann sie im FE keinen Kalender auswählen!

Wie kann ich einstellen, dass eine Gruppe den Kalender auswählen kann?

#462 Tim schrieb am 15.04.2008 09:41

Redface

beim record "Kalender" die Gruppe als Owner angegeben und schon klappt es!

#463 Tim schrieb am 15.04.2008 09:53

das würde klappen, dann sehen aber nicht-eingeloggte aber den Kalender nicht mehr!

Wie kann man beides aktivieren?

#459 Tim schrieb am 13.04.2008 17:38

Wenn ich in der Extension (im FE) einen neuen Event erstelle (oder einen editiere), kommt folgende Fehlermeldung:

Warning: (Registered shutdown functions) Unable to call Array() - function does not exist in Unknown on line 0

 

 

Leider habe ich keine Ahnung, was sie bedeutet.

Ich fand keine Fehler im FE Edit!

 

Diese Meldung sieht also eigentlich nur blöd aus!

 

Vielen Dank für eine Hilfe

#558 Mario Matzulla schrieb am 12.10.2009 21:12

du hast bestimmt noch eine andere Extension installiert, welche einen solchen Funktionsaufruf tätigt: register_shutdown_function. cc_debug zum Beispiel. Wenn du die deaktivierst sollte wieder alles gut aussehen

#456 Andi schrieb am 09.04.2008 18:55

Hallo,

ich versuche mich an TYPO3 und habe den Kalender eingebaut so wie hier beschrieben. Leider ignoriert der Kalender bei der Darstellung eines Events die Angabe für Ort und Organisator. Gibt es hier noch einen Kniff, eine Einstellung die es zu beachten gilt?

:help:

#457 Tim schrieb am 11.04.2008 18:00

Ort und Organisator müssen im content erlaubt sein.

#453 andy schrieb am 05.04.2008 15:14

Hallo, habe den Kalender nach dieser Anleitung eingebaut und es hat auch prima funktioniert.

Nun ist mir aufgefallen, dass der aktuelle und markierte Tag im Minikalender seit ein paar Wochen einen Tag nachgeht. Liegt das am Schaltjahr?

Kann ich da etwas einstellen?

Habe zwar schon gesucht, aber leider noch keine Lösung gefunden.

einen Kommentar schreiben
Typo3