Was ist der beste Weg, um komplexe Datentypen in CakePHP zu verarbeiten?

8

Mein Ziel: Ersetzen Sie den Standard Cake Datepicker

Ich hasse die standardmäßigen CakePHP FormHelper date-picker select-Elemente und möchte stattdessen das jQuery UI Datepicker-Widget verwenden. Um die Qualität zu verringern, möchte ich ein Datumsfeld (aktiviert mit dem Widget) und eine Auswahlbox für die Zeitauswahl, die auf 15-Minuten-Inkremente beschränkt ist.

Falls ich das schlecht erklärt habe, sieht es so aus:

Meine ideale Lösung

Um Wiederholungen zu minimieren, möchte ich den HTML-Code in ein Layout-Element einfügen und ihn mit einer Verhaltensfunktion verarbeiten. Auf diese Weise könnte ich Folgendes tun:

view.ctp

%Vor%

model.php

%Vor%

Das Problem

Leider, wenn es zum beforeSave (oder beforeValidate ) Callback kommt, wird der Datepicker & amp; Timepicker-Felder wurden durch die Funktion deconstruct des Modells zerstört. deconstruct scheint nach Daten zu suchen & amp; Mal, wie FormHelper sie erstellt.

Kurz gesagt, es sucht:

%Vor%

aber stattdessen findet es:

%Vor%

Und weil es die Struktur, die es erwartet, nicht findet, habe ich am Ende:

%Vor%

Ich weiß, dass ich mit jQuery versteckte Eingaben mit den entsprechend benannten Feldern aktualisieren kann, aber das würde sich nicht gut verschlechtern.

Aktueller Workaround

Was ich im Moment mache, ist das Waschen der Daten durch meine Verhaltensfunktion vor dem Speichern - aber das ist nicht der richtige Weg, es zu tun:

%Vor%

Also ...............

Was ist der beste Weg, dies zu tun? Putting in beforeSave oder beforeValidate scheint wie "der Kuchen Weg", aber deconstruct tötet mich. Muss ich AppModel erweitern und deconstruct überschreiben? Das scheint auch hässlich.

    
Farray 05.11.2011, 04:20
quelle

1 Antwort

2

Normalerweise mache ich meine Datumsfelder als Textfelder in der Ansicht, um die standardmäßige Form Helper-Ausgabe zu überschreiben, und verwende dann jQuery date picker (oder was auch immer Ihr alternativer Picker sein würde), um das Datum zu setzen:

%Vor%

Dies würde eher ein typisches Tag als alle Dropdowns ausgeben.

Dann ändere ich in der Funktion beforeSave meines Modells das Format in das MySQL-formatierte Datum:

%Vor%

(Denken Sie daran, in beforeSave true zurückzugeben)

Dies funktioniert mit einem richtigen Datetime-Datentyp in der Datenbank und es klingt wie das, was Sie versuchen zu tun.

    
Scott Harwell 10.11.2011 01:00
quelle

Tags und Links