My Goal: Değiştir Kek Datepicker
varsayılan CakePHP FormHelper tarih seçici elemanlarını seçmek ve yerine jQuery UI Datepicker widget'ı kullanmak istiyorum nefret Varsayılan. Zarif bir şekilde küçültmek için, bir tarih alanına (widget ile etkinleştirilmiş) ve 15 dakikalık artışlarla sınırlandırılmış bir zaman seçici seçim kutusuna sahip olmak istiyorum. tekrarını en aza indirmek içinCakePHP'de karmaşık veri tiplerini işlemenin en iyi yolu nedir?
My İdeal Çözüm
, bir düzen Öğesi ve süreç içinde HTML koymak istiyorum:
durumda ben kötü, burada göründüğü gibi olduğunu açıkladı Bir Davranış işlevi kullanarak. Aşağıdaki gibi bir şey yapabileceğini Bu şekilde: zaman,
Maalesef
view.ctp
echo $this->element('datepicker', array('data' => $data));
model.php
$actsAs = array('Datepicker');
function beforeSave($options){
$this->parseDatepickers(); //behavior function would alter $this->data
return true;
}
Problem, beforeSave
(veya beforeValidate
) geri çağırma tarihini alır. & timepicker alanları, modelin deconstruct
işlevi tarafından yok edildi. deconstruct
, FormHelper bunları oluşturmanın yolunu bildirmek için & kez aramış gibi görünüyor. Kısacası
, bu arıyor: [date_field] => Array
(
[year] => 2011
[month] => 11
[day] => 11
[hour] => 8
[min] => 00
[meridian] => pm
)
ama bunun yerine buluyor:
[date_field] => Array
(
[datepicker] => 11/11/2011
[timepicker] => 8:00 pm
)
Ve o beklediği yapıyı bulamaz çünkü, ben bu ile sonuna kadar:
[date_field] =>
ben uygun adlandırılmış alanları ile jQuery güncelleme gizli girişler olabilir biliyorum ama bu iyi degrade olmaz.
Güncel Geçici çözüm Şu an için, önce tasarruf etmek davranışlarım işlevi aracılığıyla veri yıkıyor, ne yapıyorum
- ama bunu yapmak için doğru bir yol gibi gelmiyor:
$this->request->data = $this->Event->fixDates($this->data);
$this->Event->save($this->data);
Yani ...............
bunu yapmanın en iyi yolu nedir
?beforeSave
veya beforeValidate
numaralı telefondan "Kek yolu" gibi görünüyor, ama deconstruct
beni öldürüyor. AppModel'i genişletmem ve deconstruct
'u geçersiz kılmam gerekiyor mu? Bu da çirkin görünüyor.
"beforeValidate" öğesine takılmayı denediniz mi? – deceze
@deceze evet. 'Model :: save()' '$ this-> set()' çağırır ve 'before' geri aramalarından herhangi birini çağırmadan önce. 'set'' deconstruct' kullanır. Sonuç, modelde, geçersiz kılınan uygulama modelinde veya davranışta "beforeValidate" veya "beforeSave" kullanılarak aynıdır. – Farray