DateInput – problem s vlozenim a updatem casu

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

Zdravim,
mam problem s doplnkem DateInput. Prosel jsem forum, ale na podobny problem jsem nenarazil. Doplnek jsem pres composer nainstaloval pres composer, zaregistroval v Bootstrapu, snad korektne includoval skripty v @layout a v latte sablone mam vlozeny kod z https://github.com/voda/DateInput.

<script> {*inicializace voda date input kalendáře*}
$(document).ready(function() {
$(‚input[data-dateinput-type]‘).dateinput({
datetime: {
dateFormat: ‚d.m.yy‘,
timeFormat: ‚H:mm‘,
options: { // options for type=datetime
changeYear: true
}
},
‚datetime-local‘: {
dateFormat: ‚d.m.yy‘,
timeFormat: ‚H:mm‘
},
date: {
dateFormat: ‚d.m.yy‘
},
month: {
dateFormat: ‚MM yy‘
},
week: {
dateFormat: „w. ‚week of‘ yy“
},
time: {
timeFormat: ‚H:mm‘
},
options: { // global options
closeText: „Close“
}
});
});
</script>

Mam editacni formular, kam z db posilam defaultni data v presenteru

`

public function renderEditDate($id)
	{
		$form = $this['editDateForm'];
		// get clening date
		$date = $this->admins->getDate($id);

		$form->setDefaults($date);
	}`

Defaultni data se zobrazi OK, problem nastava, kdyz je aktualizuji a chci ulozit do db. U data se zmena ulozi do db. U casu se ale prislusne hodnoty nastavi na NULL (vypis ladenky o nemoznosti zapisu NULL hodnoty) a ty se posilaji do db (projdou pouze, pokud bych cas nemenil). Pokud zadam AddRule, viz kod nize, tak to pres ty pravidla neprojde a formular se neodesle.

Inputy potom vypadaji takhle.

$form->addDate('date', 'Datum', DateInput::TYPE_DATE)
		->addRule(Form::VALID);
      $form->addDate('start_at', 'Start', DateInput::TYPE_TIME)->addRule(Form::VALID);
      $form->addDate('end_at', 'Konec', DateInput::TYPE_TIME)->addRule(Form::VALID);

Kdyz jsem si v metode zpracovavajici formular dumpnul $form, tak tam ta data vidim korektne, ale ve values je uz NULL. Vubec me nenapada, kde by mohl byt problem. Sloupce v db mam pro datum DATE a pro cas TIME. Zkousel jsem i ruzne experimenty s DateTime, ale stejny vysledek.

Neresil jste nekdo neco podobneho? Pripadne jak jinak jednoduse vyresit zadavani casu? S nette zacinam a uz mi to vzalo vice casu, nez by mi bylo mile. Diky.

ZahorskyJan
Člen | 55
+
0
-

Do values se dostanou jenom hodnoty, které projdou validací (základ, je víc možností jak ovlivnit co je ve values). Nevím co používáš za rozšíření formuláře, protože addDate není v základních Nette\Forms. Takže záleží na tom, jaký formát očekává ten formulářový prvek, když po něm chceš ať validuje (addRule). Z JS jde formát dd.mm.yy a tipnu si, že ten prvek čeká spíš dd.mm.YYYY

voda
Člen | 561
+
0
-

@Mava ukaž jak vypadá dump v metode zpracovávající formulář.

Mava
Člen | 4
+
0
-

ZahorskyJan napsal(a):

Do values se dostanou jenom hodnoty, které projdou validací (základ, je víc možností jak ovlivnit co je ve values). Nevím co používáš za rozšíření formuláře, protože addDate není v základních Nette\Forms. Takže záleží na tom, jaký formát očekává ten formulářový prvek, když po něm chceš ať validuje (addRule). Z JS jde formát dd.mm.yy a tipnu si, že ten prvek čeká spíš dd.mm.YYYY

Diky za poznamku. Je to tak, pridal jsem validacni pravidlo FORM::VALID a nyni to ani neprojde validaci (nevim, proc me to nenapadlo driv). Podivam se na to, nedarilo se mi prave zmenit format casu, se kterym do pracuje. Diky, jinak pouzivam doplnek DateInput

Mava
Člen | 4
+
0
-

voda napsal(a):

@Mava ukaž jak vypadá dump v metode zpracovávající formulář.

Fragment z dumpu $form. Tady jsou ta upravena data ok, ale vypnul jsem u formulare validaci. Takze plati to, co psal @ZahorskyJan, ale netusim, kde to upravit. Jinak kalendar vypada takhle, coz take nevim, jestli je dobre. Trochu jsem se v tom uprimne ztratil. Takze kde muzu nastavit format tak, aby to proslo tou validaci?

httpData private => array (5)
date => "2016-01-03" (10)
start_at => "09:00" (5)
end_at => "17:00" (5)
save => "Uložit změny" (14)
do => "editDateForm-submit" (19)

a $values

Nette\Utils\ArrayHash #ecb4
date => DateTime #ce04
date => "2016-01-03 00:00:00.000000" (26)
timezone_type => 3
timezone => "Europe/Prague" (13)
start_at => NULL
end_at => NULL

Editoval Mava (15. 11. 2016 13:31)

voda
Člen | 561
+
0
-

DateInput očekává čas ve formátu H:i:s, ale z prohlížeče přijde jen H:i, takže to neprojde validací. To je kalendář a time input přímo z prohlížeče nebo nějaký javascriptový?

Mava
Člen | 4
+
0
-

voda napsal(a):

DateInput očekává čas ve formátu H:i:s, ale z prohlížeče přijde jen H:i, takže to neprojde validací. To je kalendář a time input přímo z prohlížeče nebo nějaký javascriptový?

Tak jsem se pohnul z mista. Jde o kalendar, ktery (zrejme?) nabizi Chrome, protoze jsem instaloval pouze DateInput a jquery-ui-timepicker-addon.js dle navodu, o jinem kalendari nevim. Napr. ve Firefoxu se generuje tento time input. Jen jsem z toho zmateny jeste o trochu vice, jak zajistit funkcnost i v Chrome (ve vsech prohlizecich stejnou)? Diky @voda

A cas uz se ve FF samozrejme predava spravne, diky sekundam zrejme viz dump $values

date => DateTime #d196
date => "2016-01-03 00:00:00.000000" (26)
timezone_type => 3
timezone => "Europe/Prague" (13)
start_at => DateTime #4a96
date => "1970-01-01 09:00:00.000000" (26)
timezone_type => 3
timezone => "Europe/Prague" (13)
end_at => DateTime #7b65
date => "1970-01-01 18:00:00.000000" (26)
timezone_type => 3
timezone => "Europe/Prague" (13)

UPDATE: Tak ani nevim jak, ale kdyz jsem nyni inicializoval kalendar, uz vse funguje i v Chrome. Jen tam pri nacteni jakoby „problikne“ ten predchozi time input, ale hned se to zmeni na tenhle. Tak netusim, kde jsem mel predtim chybu, ale zda se, ze funguje. Cestina bezi, jdu testovat.

Zatim diky @voda i @ZahorskyJan

Editoval Mava (15. 11. 2016 13:31)