addHidden nastavenie aktualneho datumu

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

caute ako nastavim do formularoveho pola Hidden aktualny datum<?

vdaka

CZechBoY
Člen | 3608
+
+1
-

Tak jako do jakýhokoliv jinýho pole…

$form->addHidden('cas')->setValue(time());
Altimit
Člen | 82
+
0
-

buď jak napsal @CZechBoY a nebo tak jak to dělám já v zápisu do DB

$this->database->table('jottings')->insert(array(
...
'date' => new \Nette\Utils\DateTime(),
...
));
cujan
Člen | 410
+
0
-

oki uz to funguje, inac uy ked sme pritom, potreboval by som vo forme zadavat cas, v polhodinovych intervaloch 10:30, 11:00 atd. co sa nato podla vas da vyuzit?

vdaka

Editoval cujan (25. 4. 2016 10:24)

CZechBoY
Člen | 3608
+
0
-

Můžeš použít třeba DatePeriod
viz example

$begin = new DateTime('2012-08-01 10:00:00');
$end = new DateTime('2012-08-01 20:00:00'); // tento čas už v poli nebude

$interval = new DateInterval('PT30M');
$daterange = new DatePeriod($begin, $interval, $end);

$intervals = [];
foreach($daterange as $date) {
	$intervals[] = $date->format("G:i");
}

// použití $intervals někde jinde...

Editoval CZechBoY (25. 4. 2016 10:40)

cujan
Člen | 410
+
0
-

CZechBoY napsal(a):

Můžeš použít třeba DatePeriod
viz example

$begin = new DateTime('2012-08-01 10:00:00');
$end = new DateTime('2012-08-01 20:00:00'); // tento čas už v poli nebude

$interval = new DateInterval('PT30M');
$daterange = new DatePeriod($begin, $interval, $end);

$intervals = [];
foreach($daterange as $date) {
	$intervals[] = $date->format("G:i");
}

// použití $intervals někde jinde...

oki a ked chcem aby som to zovseobecnil na aktualny datum a aktualny alebo vyzsi cas, lebo potrebujem yadavat cas od do…

cujan
Člen | 410
+
0
-

pouzivam zatial na naplnanie

<?php
$begin = new DateTime(date('d.m.Y'));
        $end = new DateTime(date('d.m.Y')); // tento čas už v poli nebude
        $end = $end->modify( '+1 day' );

        $interval = new \DateInterval('PT30M');
        $daterange = new \DatePeriod($begin, $interval, $end);

        $intervals = [];
        foreach($daterange as $date) {
        $intervals[] = $date->format("G:i");
        }
?>

uz len potrebujem vyriesit aby ak vyveriem cas od 11:30 tak cas do nemohol byt 11:00

a este jedna vec, cas ukladam v mysql do pola typu time, a neulozi mi ho…namiesto 11:30 mi ulozi 00:00:36 napr.

Editoval cujan (25. 4. 2016 11:53)

cujan
Člen | 410
+
0
-

cas mi neuklada asi koli tomu, ze ked som si dal vypisat casy dumpom, tak mam tam nie hodnotu casu ale pozicie v poli…problem je v tom, ze neviem ako donutit select aby vracal hodnotu cas a nie poziciu v poli…

Editoval cujan (25. 4. 2016 12:03)

CZechBoY
Člen | 3608
+
0
-

Tak do toho formulářového políčka si dáš validační podmínky aby byl čas DO větší než čas OD.
Zkus to takhle:

$casOd = $form->addSelect('cas_od')
	->setItems($intervals);
$form->addSelect('cas_do')
	->setItems($intervals)
	->addRule(Form::NOT_EQUAL, 'DO == OD', $casOd)
	->addRule(Form::MIN, 'DO < OD', $casOd);

Tak do databáze ještě přidej :00.

cujan
Člen | 410
+
0
-

CZechBoY napsal(a):

Tak do toho formulářového políčka si dáš validační podmínky aby byl čas DO větší než čas OD.
Zkus to takhle:

$casOd = $form->addSelect('cas_od')
	->setItems($intervals);
$form->addSelect('cas_do')
	->setItems($intervals)
	->addRule(Form::NOT_EQUAL, 'DO == OD', $casOd)
	->addRule(Form::MIN, 'DO < OD', $casOd);

Tak do databáze ještě přidej :00.

OKI a s ukladanim je to len tak somarina, ze mi nevracia hodnotu casu (napr. 11:30) ale poziciu v poli(napr. 7)…

CZechBoY
Člen | 3608
+
0
-

A jak to vypisuješ/+ukládáš?

cujan
Člen | 410
+
0
-

CZechBoY napsal(a):

A jak to vypisuješ/+ukládáš?

citam hodnotu z

<?php
$form->addSelect('prichodCas', 'čas príchodu do revíru', $intervals);
?>
CZechBoY
Člen | 3608
+
0
-

A problém je, že to blbě ukládá do db nebo když tu hodnotu z db vypisuješ někam(jak?)?

cujan
Člen | 410
+
0
-

Do db to zle uklada,proste neviem zo selectboxu nacitat hodnotu value…

CZechBoY
Člen | 3608
+
0
-
$form->addSelect('od', ...);

$form->onSuccess[] = function ($form, $values) {
	$this->db->table('casy')->insert([
		'od' => $values->od. ':00',
		'do' => $values->do . ':00'
	]);
};
cujan
Člen | 410
+
0
-

CZechBoY napsal(a):

$form->addSelect('od', ...);

$form->onSuccess[] = function ($form, $values) {
	$this->db->table('casy')->insert([
		'od' => $values->od. ':00',
		'do' => $values->do . ':00'
	]);
};

to mi jesne, lenze mne $values->od vrati napr. 7 a nie 11:30, cize mi vrati poziciu v poli na ktorej sa nachadza hodnota 11:30

CZechBoY
Člen | 3608
+
+1
-

ajo

$form->addSelect('od')
	->setItems($invervals, false);	// hodnoty stejné jako klíče
GEpic
Člen | 566
+
0
-

PS: Pokud vkládáš nebo upravuješ záznam v databázi a chceš, aby měl aktuální datum a čas, je nejlepší použít vlastnost sloupce on update CURRENT_TIMESTAMP (typ sloupce TIMESTAMP). Tak to používám já a nemusím to v Nette vůbec řešit.

Pokud vkládáš aktuální datum a čas do hidden inputu, tak nikdy nevíš, za jak dlouho člověk formulář odešle, a ten čas pak může trošku mást, když to odešle až za (třeba) hodinu. :)

Editoval GEpic (25. 4. 2016 21:16)

cujan
Člen | 410
+
0
-

CZechBoY napsal(a):

ajo

$form->addSelect('od')
	->setItems($invervals, false);	// hodnoty stejné jako klíče

super funguje to…dikes…

cujan
Člen | 410
+
0
-

este jedna otazocka, viem nastavit validaciu TextBox, abu uzivatel vedel rucne zadat cas, ale iba v spravnom tvare napr. 11:30. Proste aby nevedel zadat 11.30, 11.3 a podobne?

CZechBoY
Člen | 3608
+
0
-

regexem třeba, případně nastavit input jako time http://www.w3schools.com/html/tryit.asp?…

cujan
Člen | 410
+
0
-

nechapem „regexem“?

Unlink
Člen | 298
+
+1
-
->addRule(Form::PATTERN, 'Nesprávny formát času', '([0-1]?\d|2[0-3]):[0-5]?\d');

Editoval Unlink (27. 4. 2016 9:44)

cujan
Člen | 410
+
0
-

len ako to nastavim aby to platilo len pri odosielani formu, lebo teraz bez vyplneneho casu neviem ani storno urobit :D

CZechBoY
Člen | 3608
+
0
-

třeba když si odchytíš obě klik události

$storno = $form->addSubmit('storno');
$storno->onClick[] = [$this, 'stornoMetoda'];
$storno->onInvalidClick[] = [$this, 'stornoMetoda'];

nebo prostě v submitu zkontroluješ tlačítko

$form->onSubmit[] = function ($form) {
	if ($form->isSubmitted() === $form['storno']) {
		$this->stornoMetoda($form['storno']);
	}
};