Wer in seinen Cake-Projekten Datumsangaben verwalten muss, sollte dazu auf den HTML-Helper zurückgreifen. Denn für die beiden Datentypen DATE und DATETIME gibt es da eine einfache Möglichkeit, diese für den Benutzer editierbar zu machen.
Zwischenruf: Eigentlich sollte diese Funktion ja im Form-Helper angesiedelt, meint selbst Nate (dritter Abschnitt).
Im View wird der Helper so verwendet:
echo $html->dateTimeOptionTag('Booking/date_from', 'DMY', 'NONE', null, null, null, false);
Bitte nicht durch den Namen dateTimeOptionTag verwirren lassen, denn es lassen sich damit auch reine Datumsangaben realisieren! Dies wird dadurch erreicht, dass der dritte Parameter ($timeFormat) auf NONE gesetzt wird. Andere Optionen für diesen Parameter sind 12 und 24, womit dann ausgewählt wird, in welchem Format die Uhrzeit angezeigt wird.
Den letzten Parameter ($showEmpty) habe ich hier auf false gesetzt, damit der Benutzer nicht eine Angabe leer lassen kann, wie z.B. Jahr oder Monat.
Ansonsten ist die Verwendung ganz einfach. Das Feld date_from ist in der MySQL-Datenbank vom Typ DATE und wird bei der Ausgabe über den Helper automatisch auf drei Select-Boxen für Tag, Monat und Jahr aufgesplittet.
Um die Daten im Controller anschließend auch wieder in nur ein Feld von $this->data['Booking'] zu haben, muss noch
$this->cleanUpFields();
vor der weiteren Verwendung in der entsprechenden Action eingebaut werden. Diese Funktion sammelt nämlich die einzelnen Variablen, wie sie durch den Helper in den HTML-Code der Seite geschrieben wurden und setzt sie zur ursprünglichen Variable zusammen (hier date_from).
Aber Vorsicht! Im Moment gibt es noch einen Bug in cleanUpFields(). Dazu muss man verstehen, wie cleanUpFields() funktioniert: diese Controller-Funktion geht alle Felder des aktuellen Models durch und überprüft, ob dort eines mit DATE oder DATETIME vorhanden ist. Wenn ja, wird $this->data entsprechend modifiziert. Wenn man in seinem Controller nun aber auf mehrere Models zurückgreift, werden trotzdem immer nur die Felder des Models überprüft, welches zum aktuellen Controller “gehört”.
Bis der Fehler gefixt wird, kann man sich in seinem Controller so behelfen:
$this->modelClass = 'Bookings'; $this->cleanUpFields(); $this->modelClass = 'User';
In diesem Beispiel befinden wir uns im UsersController und wollen cleanUpFields() für das Model Bookings benutzen.
RSS feed for comments on this post · TrackBack URI
Leave a reply