Hallo antiheld2000,
ich habe justamente die gleiche Anforderung! Ich habe auch bereits einen Prototypen für die Lösung allerdings noch nicht sehr sauber programmiert, aber ich kann dir mal erzählen wie ich vorgegangen bin.
Erzeugt werden sollte ein Stundenplan. Der wurde bis jetzt immer als PDF/JPG hochgeladen. Auf der Site gibt es zudem einen Bereich mit Beschreibungen zu den Kursen. Ziel sollte sein, die Pflege einfach und schnell zu machen (CGCalendar empfand ich für den Kunden zu kompliziert auch wenn es ein tolles Modul ist.). Zudem sollten mit der Pflege des Kurses (die als Einzelseite bestehen sollten) idealerweise der Kalender erzeugt werden. Ein weiterer Vorteil ist, dass so die Kursdetails selbst unter hübschen hierarchischen URLs erreichbar sind und auch sonst problemlos in der Hierarchy auftauchen.
Im Vergleich zu deinem Beispiel war das Layout allerdings:
PLAN.... Tag Tag Tag Tag
Zeit ..... ..... ..... ..... .....
Zeit ..... ..... ..... ..... .....
Zeit ..... ..... ..... ..... .....
Zeit ..... ..... ..... ..... .....
Dabei wurden pro Zelle alle passenden Termine angezeigt. Da die Dauer der Kurse unterschiedlich ist, können bei den versch. Kursen durchaus Startzeiten öfters auftauchen aber unterschiedliche Lauflängen haben.
Gespeichert werden die Daten wie Dauer, Beschreibung, Teasertext, Anmeldung erforderlich etc... in einzelnen Content-Blöcken. Dabei gibt es für jeden Tag ein Startzeitenfeld, in dem Komma-getrennt die Startzeiten angegeben werden können.
Aus den Startzeiten aller Kurse und deren jeweiligen Dauer habe ich eine Liste mit allen "Time Slots" (Von-Bis-Zeiten) erstellt. Dieser wird per Smarty bereit gestellt.
Mit einem Plug-in durchlaufe ich den entsprechenden Hierarchieordner und Speicher alle Kurse in einem Smartyarray. Dabei lege ich zum Kurs noch ein kompaktes array mit den Tagen und Stundenslots an. Das einzelne Datenelement (der Kurs) sieht in etwa so aus:
ID
Alias
Content
Menu_Title
Title
anmeldung_erforderlich (content_block)
Timeslots (array)
[0] entspricht Montag (array)
[0][1] = "12:00 - 13:30"
[0][2] = "13:00 - 13:45"
[1] (Tag ohne diesen Kurs)
[2] entspricht Montag
[2][1] = "12:00 - 13:30"
[2][2] = "13:00 - 13:45"
[2][3] = "15:00 - 15:45"
Im Template stehen nun alle Startzeiten und alle Kurse bereit. Jetzt erzeuge ich für jede Uhrzeit eine Zeile mit zusätzlich 7 Spalten für die einzelnen Tage. In den einzelnen Zellen prüfe ich jetzt ob z.B. in dem Startzeiten[Tag] Array (also die Zeiten des bestimmten Tages) eine Startzeit vorhanden ist, die dem Time-Slot Wert der aktuellen Zeile entspricht. Wenn ja werden die gewünschten Daten ausgegeben (z.B. Titel, Trainer und Dauer) und ein Link zur Kursbeschreibung oder zum Buchungsformular erstellt.
Grob sieht das Smarty Template dann in etwa so aus:
{stundenplan_tag}
...
{foreach from=$slots item=$startzeit}
{$startzeit}
{foreach from=$kurse item=$kurs}
{assign var=help value=$kurs->timeslots[0]}
{foreach from=$help item=slot}
{if $slot == $startzeit}
{cms_selflink page=$kurs->id}
{/if}
{/foreach}
{/foreach}
{foreach from=$kurse item=$kurs}
{assign var=help value=$kurs->timeslots[1]}
{foreach from=$help item=slot}
{if $slot == $startzeit}
{cms_selflink page=$kurs->id}
{/if}
{/foreach}
{/foreach}
{/foreach}
...
Dies erzeugt dann eine Tabelle in etwa wie folgt:
PLAN.... Tag Tag Tag Tag
Zeit ..... .K.1 ..... .K.1 .....
Zeit ..... .K.1 ..... .K.1 .....
Zeit ..... ..... ..... .K.1 .....
Zeit ..... ..... ..... ..... .....
Das ganze Funktioniert mit etwa 20 Kursen trotz der vielen Smarty Schleifen in etwa 0.3 Sekunden auf einem normalen 20€ 1&1 Webserver (ohne irgendwelche geschwindigkeitsoptimierenden Maßnahmen wie z.B. Caching oder Ordnerbereinigung).
NaN hat den Standard Content-Typ ein wenig abgewandelt, so dass man auch checkboxen oder dropdowns im Template (Backend) erzeugen kann. Damit wird die Pflege für die späteren Besitzer sehr einfach.
hier
Naja, hoffe die Beschreibung kann dir ein wenig weiterhelfen.
Mit besten Grüßen
Nils