[TYPO3-UG-Muenster] Cal-Extension: Bericht vom NRW-Treffen am 25. Oktober 2008

Martin Bless m.bless at gmx.de
Sun Oct 26 11:35:34 CET 2008


Letzter Samstag im Monat: Da läutet die Glocke für das regelmäßige
Treffen der TYPO3 Usergroup NRW. Diesmal mit einem ganz besonderen
Event: Mario Matzulla ist da und lässt sein Baby, die CAL-Extension
leben. Das ist nun wirklich Grund genug, endlich einmal den Sprung von
Münster nach Düsseldorf zu machen. Und, das Beste kommt nicht nur zum
Schluss, sondern steht gerne auch mal am Anfang: Es hat sich gelohnt!
Da konnte auch WDR2 nichts dran ändern, der uns Nebel angedroht hatte,
der dann noch nicht einmal da war. Sehr schöne Räumlichkeiten in der
Marketing-Factory, das macht Spaß. Und gut dass ich da instinktiv noch
Marmelade mitgebracht habe: Sehe jetzt erst, dass es dazu ja auch noch
einen Aufruf gab.

Thema hatten wir "nur" eins: Die CAL-Extension.

Die Beschäftigung mit Zeitphänomenen ist sicher ein uraltes "Hobby"
der Menschheit und auch eng mit astronomischen Gegebenheiten
verknüpft. Man denke einmal an die Himmelsscheibe von Nebra:
   http://de.wikipedia.org/wiki/Himmelsscheibe_von_Nebra
   
Vielleicht nicht nur "Hobby", sondern schnell auch eine Notwendigkeit,
und so sind auf der Welt viele Kalender entstanden. Die Schwierigkeit
der Kalenderrechnung ergibt sich daraus, dass Erdumlaufbahn,
Erddrehung und Mondumlauf in eine brauchbare Beziehung gesetzt werden
müssen. Und die Zahlen teilen sich nunmal nicht glatt und sind zudem
noch nichtmal konstant. Wer sich über die verschiedenen
Kalenderrechnungen informieren will, wird hier umfassend "bedient":
   http://emr.cs.iit.edu/home/reingold/calendar-book/third-edition/

Das ist ein starkes Werk. Besonders gut gefällt mir ja der Kalender,
der zum Teil noch in Agypten gilt: Das Jahr hat immer 12 mal 30 Tage,
und dann macht man einfach noch 5 oder 6 Feiertage.

Nun zu CAL, DER TYPO3-Kalenderextension. Alles, was ich hier schreibe,
entstammt meinen privaten Notizen. Für das, was richtig ist, geht das
Lob an die Autoren und Vortragenden. Die Fehler gehören mir und dürfen
gerne korrigiert werden. Der Vortrag stand unter dem Motto "Cooking
with Maria" und Chefköche sind:

- Mario Matzulla mit live Vortrag
- Jeff Segars per Video
- Steffen Kamper mit live Demo von Bespielen
- Franz Koch.

Natürlich sind wir neugierig, und damit auch ja nichts untergeht,
gleich hier:
   http://www.matzullas.de/mario.0.html
   http://jeffsegars.com/
   http://www.sk-typo3.de/

Bei der Ein- und Wertschätzung hilft vielleicht die Info, dass die
Entwicklungszeit im Dezember 2008 bereits drei Jahre beträgt.

Ein Dreh- und Angelpunkt ist:

   http://typo3-calendar.org/

Reingucken!

CAL hat historische Wurzeln in früheren Kalender-Extensions und
PHP-Anwendungen, ist nun aber gründlich durchdacht und vom alten Code
ist praktisch nichts mehr geblieben. Insbesondere das Fundament ist
solide. Architektonisch spielen Model-View-Controller-Überlegungen
wohl eine starke Rolle:
   http://de.wikipedia.org/wiki/MVC
   
Für CAL gibt's hier ein imposantes Schaubild (PDF, SVG):
   http://typo3-calendar.org/1639.0.html 

Was mich besonders begeistert ist, dass die vier CAL-Miraculixe nicht
einen proprietären Datensaft nach eigenem Rezept kochen, sondern
versuchen, sich möglichst an den iCalendar-Standard zu halten:
   http://de.wikipedia.org/wiki/ICalendar

Das Regelwerk hierzu findet sich in den "Aufrufen zur Stellungnahme",
den RFCs:
   http://tools.ietf.org/html/rfc2445

"ical", "ics", "icalendar" sind wichtige Stichworte hierzu, die man
sich merken sollte. Sie beschreiben Austauschformate von
Kalenderdaten, MIME-Type "text/calendar".

"CAL kann das Standardformat exportieren und importieren." Das ist
eine Aussage, die man gar nicht hoch genug schäzten kann.

Wenn man CAL verwenden will, benötigt man die Extension 
   http://typo3.org/extensions/repository/view/cal/current/

und den den ein und anderen Sysordner. Zuerst legt man immer eine
Kalender an und kann hier unterscheiden zwischen privatem und
öffentlichem Kalender. Private werden nur von bestimmten FeUsern und
-gruppen gesehen. Optionale kann man Kalenderkategorien anlegen. Das
eigentliche "Fleisch", also das Datenmaterial für diese "Knochen" sind
dann die Events, die immer zu (mindestens?) einem Kalender gehören. 

Preisfrage: Was kennzeichnet einen Event? Er hat jedenfalls IMMER ein
Anfangsdatum und eine Dauer bzw. Endedatum. "Meeting 10 Uhr" ist also
KEIN Event! Events können auch im Backend eingegeben werden. In den
Feldern "HeaderStyle" und "BodyStyle" kann man etwas eintragen. Sie
werden später ausgewertet und in CSS-Klassen umgesetzt, so dass man
Events z. B. farblich unterlegen kann. Es gibt auch (ca.) sechs
vorbereitete, wie red, green, blue usw. sowie "default". Genaue Namen
bitte nachgucken.

Bei der Vorstellung der Basics haben wir unmittelbar kleinere Ausflüge
zu den Tipps und Tricks und "Was man wissen muss" usw. gemacht. Die
Details sprengen hier den Rahmen, aber dafür gibt es ja auch mehr als
150 Seiten Doku:

http://typo3.org/documentation/document-library/extension-manuals/cal/1.1.0/view/
   
Deshalb hier vielleicht eher die Hinweise auf einige Prinzipien, Tipps
und Fallgruben ("pitfalls"):

- Listenauswahl im Kalenderdatensatztyp: Hier ist der erste Punkt oft
der, der als Default zum Tragen kommt.

- FAQ: Wie mache ich ne Listenansicht für XXX? Per Template! (=
Text-Template-File).

- Wichtig ist es natürlich immer, die Startingpoints richtig zu
setzen.

- Wenn man Links zB auf die Detail-Ansicht haben will, muss man im
Flexform auch die Seite eintragen, auf der die Detailansicht
erscheinen soll. Wie soll sonst der Link generiert werden?

- TYPO3 v4.3 bringt nächsten eine neue Funktion mit, die den Aufbau
der PIDList (also das Auswerten der Startingpoints) erheblich
beschleunigt.

- Es gibt ein Typoscript-Feld im Plugin, mit dem auch User, die sonst
nicht an die TS-Einstellungen kommen, letzte Einstellungen machen
können. Andererseits kann der Admin dies nun auch wieder disablen.
Schöne gute Konfigwelt!

- Die Kalendermaschine in CAL kann mit JEDER Art von Event umgehen.
Allerdings muss der Event selbst wissen, wie er sich gerne darstellen
möchte. (Objektorientierung)

- Für ALLE Events wird die Ausgabe der Events im Event-Template
(Text-Datei) definiert. Genau dort und auch NUR dort. Alle anderen
Templates enthalten nur Referenzen auf diese Definitionen.

- Will man ICS-Daten importieren, so legt man einen Kalender vom
entsprechenden Typ an. Der zeigt dann alle Daten an, ist aber
ReadOnly. Aber, ta ta ta taaa, da kann ein Trick doch nützlich werden:
Ändert man tx_cal_event.isTemp=1 in 0, so ist der Kalender editierbar.
Use at your own risk! Aber, der Nutzen: Vielleicht kann man Kalender
so einfach exportieren, an anderer Stelle wieder importieren und dann
einfach normal nutzen?

Tipp:
Gelobt wurde die "Gabriel-Extension". Auch wenn man nur einen Cronjob
anlegt, kann man damit direkt aus TYPO3 heraus verschiedene Aufgaben
verwalten. ZB um Kalender, die auf einem ICS-Feed basieren, regelmäßig
zu aktualisieren.
http://typo3.org/extensions/repository/view/gabriel/current/
http://typo3.org/extensions/repository/view/ml_tut_gabriel/current/

- CAL unterstützt als Ausgabe auch
   einen ICS-Feed, Standardseitentyp 150
   einen RSS-Feed, Standardseitentyp 151

- Kalenderseiten werden ggf. durchaus in TYPO3 gecached. Allerdings
bringt CAL eine eigene Funktion mit, die dafür sorgt, dass nicht auch
noch gigantischerweise Zwischenschritte gecached werden, wenn sie bei
den Subpart- und Markern (evt. nur minimal) etwas geändert hat.
Kalender, die editierbar sind, werden nicht gecached.

- Das Typoscript, dass bei CAL zum Einsatz kommt, ist SEHR SEHR lang.
Und kann auf den ersten Blick verwirrend aussehen. Es folgt jedoch
weitgehend diesem prinzipiellen Aufbau:
plugin.tx_cal_controller {
	((view)).((object)).((property))
	# Beispiel:
	month.event.title.crop=5
}
WICHTIG: Praktisch alle Felder (Properties?) haben
stdWrap-Eigenschaften, können also das, was ein TS-TEXT-Objekt kann.

- Clever und endlich einmal: Die Renderingmaschine in CAL ist
"Template-getrieben". Soll heißen: CAL guckt in den Templates und im
TS nach, welche Ausgaben benötigt werden, und genau die werden dann
berechnet. Andersherum ginge es vermutlich auch gar nicht: Man kann
nicht alle denkbaren Ausgaben errechnen, um dann nur wenige zu
verwenden.

- Fallgrube: Für Allday-Events und normale Events existieren getrennte
Templates, die beide angepasst werden müssen. Ähnliches kann analog an
anderer Stelle vorkommen.

- Unterschiedliche Zeilendarstellung für gerade und ungerade Zeile in
der Listenansicht ist bereits vorgesehen. Kann per TS auf mehr
Varianten erweitert werden.

- Entwickler, aufgepasst: Setze in der localconf.php diese drei
Zeilen, und dir wird immer etwas angezeigt und mitgeteilt:
   $TYPO3_CONF_VARS['SYS']['sqlDebug'] = 1;
   $TYPO3_CONF_VARS['SYS']['displayErrors'] = 1;
   $TYPO3_CONF_VARS['SYS']['displayErrors'] = 1;
NICHT VERGESSEN: Später wieder ausschalten!!!


- Steffen Kamper hat gezeigt, wie er über den
Standard-Hook-Mechanismus von TYPO3 die Hooks in CAL verwendet. Suche
nach "hook" in den CAL-Quelltexten und schlage nach, welche Parameter
erforderlich sind.

- CAL verwendet die PEAR date-Klasse.
   http://pear.php.net/
   http://pear.php.net/package/Date
Wer die bereits installiert hat: Glückwunsch!

- Es gibt auch eine TYPO3-Extension, um PEAR-Klassen zu verwalten:
   http://typo3.org/extensions/repository/view/pear/current/

- Aber auch der, der PEAR nicht installiert hat, wird bedient: Als
"Fallback" bringt CAL eigene Funktionen mit (nachteilig?).

- Intern wird jeder Kalender letztlich aus einem ggf. langen, großen
PHP-Array von Events gerendert, dass nach Datum, Uhrzeit und Event
hierarchisiet ist. Da kann man natürlich PHP-mäßig "reinstochern".

- Man KANN sich ALLE Templates aus der CAL-Extension nach fileadmin/
kopieren, und braucht nur einen TS-Wert zu ändern, um diese zu nutzen.
Wird aber leicht unübersichtlich.


TIPP:
Steffen hat gezeigt, wie man im BE im TS-Objectbrowser sich sozusagen
"Shortcuts" auf Teilbereiche des TS anlegt, indem man unten auf der
Seite den OL-Link benutzt. Steht für Object-List, und kaum jemand
weiß, was das bedeutet. Damit kann man die Dropdown-Liste für das
Anspringen bestimmter TS-Punkte erweiteren!

- Fallgrube: Die TS-Einstellungen zur Legende unterm Kalender sind u.
U. nicht leicht in den Templates zu finden, denn die Legende wird aus
dem Tree der Kategorien generiert.

   
========= Kann denn Typoscript Sünde sein? ============

Auch dann, wenn es korrekt ist? Ja, das kann es! Das Problem kann die
schiere Masse sein. Zuuuu viiiieeeel Typoscript kann den Zeit- und
Speicher-Rahmen sprengen. Deshalb der dringende Rat von Steffen und
Mario: 

(a) Lege alles an TS tot, was nicht benötigt wird:

plugin.tx_cal_controller.((object)) >
usw.   

(b) Benutze niemals Frontend-, ICS- oder RSS-Ausgabe auf der gleichen
Seite.

========== Liste möglicher Sünden ENDE =============

- Studiere die Datei setup.txt: Es gibt per TS ausgefeilte
Möglichkeiten zur Rechte-Einstellung. Unter anderem hat der Wert
"time_Offset" Einfluss darauf, wie weit in Vergangenheit (und/oder
Zukunft?) jemand Termine eingeben kann.

- Was es mit den %%%LABELS%%% auf sich hat, habe ich so schnell nicht
verstanden. Jedenfalls funktioniert es und sorgt dafür, dass die
richtigen Werte zum richtigen Zeitpunkt da sind. Wie war das also
noch?

- Es gibt in CAL "Exception-Events". Trägt man einen solchen ein, kann
er dafür sorgen, dass ein ansonsten regelmäßiger Event an einem
bestimmten Zeitpunkt ausfällt. Es muss sich aber um einen regelmäßigen
handeln nicht nur um eine Wiederholung. Es bleibt der eigenen
Überlegung überlassen, was passiert, wenn nun ein Termin alle drei
Tage stattfindet aber alle fünf Tage ausfällt. Viel Spaß!

- Tipp und Frage:
Conditions im TS sind ggf. schneller als EXT-Templates. Hat da jemand
eine Quelle zu?

ACHTUNG:
Es sind vor allem die wiederkehrenden Termine, mit denen CAL den
Server an den Rand des Wahnsinns treiben kann. Da muss sehr viel
berechnet werden. 

Call for feedback:

Es gibt in CAL deshalb zur Zeit ein "experimental feature"
useNewRecurringModel (etwa dieser Name). Hierzu hätte Mario gerne
Feedback.

Update von älteren CAL-Version: Es gibt dazu ein Updatescript. Und der
Export- und Import von ICS-Daten ist auch eine Idee.

Dann war da noch was zu GoogleMaps ... Wie war das? CAL unterstützt
vor allem die TYPO3-Extension von der WEC? Hhm, welche ist das?

Natürlich wurden auch bestehende Bugs angesprochen und noch viel mehr
Feature-Requests gleich vor Ort in die Runde getragen. Hier sei
gesagt: Es macht überhaupt keinen Sinn, diese per Mail irgendwo hin zu
schicken. Hier ist der richtige Ort dafür:
   http://svn.webempoweredchurch.org/projects/calendar/issues

Was hier eingetragen ist, geht auf alle Fälle schon einmal nicht
verloren. Und Jeff und Mario können hier effizient den Dingen
nachgehen. Die CAL Version 2.0 ist hier gleichsam das Auffangbecken
visionäre Überlegungen. 

Aktuelle Versionen sind per Subversion hier zu erhalten:
   http://svn.webempoweredchurch.org/snapshots/show/calendar

Wann immer von Entwicklerseite ein Submit gemacht wird, also für jedes
neue Release, sollte dort unmittelbar ein neuer Build erstellt werden,
nicht nur "nightly". Siehe auch:
   http://de.wikipedia.org/wiki/Subversion_(Software)


Fazit:
Fünf Stunden waren veranschlagt, und die Zeit ist vergangen wie im
Fluge. Es hat Spaß gemacht und sich SEHR gelohnt. Ein herzliches
Dankeschön an alle Beteiligten!

Ach ja, die Marmeladen:

(1) 1000g Rhabarber, 500g Kiwis, 500g Birnen, 1000g Gelierzucker 2 zu
1, 4 Minuten kochen, heiß in saubere Gläser, für 10 Minuten aufen den
Kopf stellen, fettich.
Die Birnen und Kiwis nicht zu reif (Aldi ...)

(2) 1000g Rhabarber, 1000g Erbeeren, 1000g Gelierzucker 2 zu 1.

Bis denne

Martin

-- 
http://mbless.de


More information about the TYPO3-UG-Muenster mailing list