Terminansicht wie iCal Wochenansicht

martinibook

martinibook

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2005
Beiträge
8.730
Reaktionspunkte
350
Eine der Terminansichten auf einer Webseiten soll einige Tage so wie bei iCal in einer Spaltenansicht darstellen. Das habe ich jetzt einfach mit absolut positionierten Divisions gemacht, die eben entsprechend groß sind. Eine Sache habe ich bisher nicht bedacht: Mehrere Termine zur gleichen Zeit.

Gibt es einen eleganten Weg, dies darzustellen? Man könnte die natürlich schmaler machen, jedoch wüsste nicht nicht, wie ich dann die neuen Positionen errechne, schließlich habe ich nur Start- und Endzeit.

Wenn ich merke, dass zwei Termine sich schneiden, kann ich sie natürlich einfach in der Breite halbieren und dann nebeneinander stellen. Aber wie behandle ich Fälle, wenn Termin A und B sich schneiden, und B und C sich schneiden? Das wird doch ein abenteuerliches Gerechne …

Hat vielleicht jemand den Algorithmus aus iCal parat? :Pfeif:
 
Keiner eine Idee?
 
Hui, sehr knifflig. Ich dachte zuerst, dass es reicht, fuer jeden Termin zu pruefen, wie viele weitere Termine im selben Zeitraum auftreten und das Div entsprechend schmal zu machen. Nur in folgendem Szenario bekommt man ein Problem:
- Termin A geht von Tag 1 bis Tag 4
- Termin B geht von Tag 3 bis Tag 6
Alles klar, 2 Termine gleichzeitig, Divs halbieren. Dann:
- Termin C geht von Tag 5 bis Tag 8
- Termin D geht von Tag 5 bis Tag 9
Rumms, 3 Termine gleichzeitig, aber nur 2 Spalten, Termin D faellt aus dem vorgegebenen Raum.

Du koenntest die Anzahl der gleichzeitig moeglichen Termine beschraenken, aber das ist wohl kaum eine Option, zumal dann immer genauso viele Terminspalten existieren und der Terminbalken winzig schmal wird.
Alternativ mit einer rekursiven Funktion pruefen, wie viele Termine maximal sich gleichzeitig in der aktuellen Ansicht (Woche, Monat) ueberschneiden und so viele Spalten anlegen.
Und als letzte und wohl beste Moeglichkeit: Denke mal ueber ein horizontales Layout nach :)
 
Die Termine beschränken sich immer nur auf einen Tag, die gehen nicht über mehrere Tage. Aber in deinem Beispiel kann man ja einfach nur Stunden anstelle der Tage nehmen.

Das Layout soll vertikal sein. Und in iCal klappt es ja auch irgendwie …
 
Die Sache ist jetzt implementiert. Es wird jetzt für jede Stunde geschaut, wie viele Termine parallel laufen. Das Maximum wird genommen und so viele Spalten eingerichtet. Alle Termine, die einen "Konflikt" hervorrufen kommen in eine Liste. Jetzt werden die Termine angezeigt, ist ein Termin konfliktfrei, dann wird er in der kompletten Breite angezeigt. Ist ein Termin konfliktbehaftet wird seine Breite entsprechend verringert und der ersten freien Spalte angezeigt. Das klappt brauchbar, ist aber bei mehr als drei Terminen parallel nicht mehr sinnvoll.
 
Zurück
Oben Unten