Stránka DatePicker

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jarks
Člen | 94
+
0
-

Dobrý den, podařilo se mi použít v aplikaci Datepicker a měl bych k němu 3 otázky. Možná je to spíš k JavaScriptu, ale nevím, co s tím, tak prosím o pomoc.

1. Nefunguje validace na REGEXP. Zatímco u tohoto, je všechno v pořádku:

$form->addText('test', 'Test')
->addRule(Form::REGEXP, 'Zadejte prosím platné datum.','/^\d{1,2}\s*\.\s*\d{1,2}\s*\.\s*(?:\d{2}|\d{4})$/');

Tohle neprojde nikdy, pokaždé vyjede chyba:

$form->addDatePicker('test', 'Test')
->addRule(Form::REGEXP, 'Zadejte prosím platné datum.','/^\d{1,2}\s*\.\s*\d{1,2}\s*\.\s*(?:\d{2}|\d{4})$/');

2. Když do políčka napíšu nějaké nesmyslné číslo a dám [Enter], změní se toto nesmyslné číslo na dnešní datum. Když ale místo toho stisknu [Tab], hausnumero zůstane nedotčené. Dá se to nějak napravit, to znamená, aby na [Tab] byla stejná reakce jako na [Enter]?

3. Datepickeru se dají nastavit parametry, jako třeba changeYear: true (link). Ale jak? Toto řešení úpravou ve třídě DatePicker je plně funkční, ale jakým způsobem nastavení zapsat třeba jako externí .js?

Díky.


Další diskuse k DatePickeru:

https://forum.nette.org/…um-narodenia

https://forum.nette.org/…rms-vs-datum?…

https://forum.nette.org/…s-za-control

Editoval jarks (27. 7. 2009 20:52)

jarks
Člen | 94
+
0
-

1. Problém je v tom, že něco jiného se validuje na straně prohlížeče a něco jiného na straně serveru. Pokud je datepicker nastaven (dateFormat) aby zobrazoval 31.07.2009 a předhodíme to validaci

->addRule(Form::REGEXP, 'Zadejte prosím platné datum.','/^\d{1,2}\s*\.\s*\d{1,2}\s*\.\s*(?:\d{2}|\d{4})$/');

na straně klienta to projde, ale na straně serveru ne, protože odesláno je 2009-07-31. Zřejmě za to může třída DatePicker a její metody getValue(), setValue(). Jednou z možností by tak bylo validovat až před odesláním modelu, nebo přímo v něm. Zabrat by mělo

^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))$

Editoval jarks (6. 8. 2009 7:53)

DocX
Člen | 154
+
0
-

Objevil jsem chybku:

V kódu je require .../FormControl.php a to dělá potíže při použití minifikované varianty Nette. Mělo by se dát spolehnout na NetteLoader a require odstranit ;)