Stránky: 1
- Úvodní stránka
- » Hlášení chyb
- » Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
#1 7. 3. 2010 15:02
- Endrju
- Člen

- Místo: Ostrava
- Registrovaný: 31. 10. 2009
- Příspěvky: 131
Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Zdravím!
V aplikaci mam moznost psat Aktuality. Uzivatel vyplni text a odesle formular. Formular vytvarim pomoci tovarnicky v presenteru a pak v metode formSubmited, ktera vypada takto:
public function newsFormSubmitted(AppForm $form)
{
if ($form['save']->isSubmittedBy()) {
$id = (int) $this->getParam('id');
$news = new News;
if ($id > 0) {
$news->update($id, $form->getValues());
$this->flashMessage('Aktualita byla aktualizována.');
} else {
$news->insert($form->getValues()); // zde vkladam aktialitu do DB
$this->flashMessage('Aktualita byla přidána.');
}
}
$this->redirect('default');
}
Potřeboval bych poradit s následujícím. V miste, kde vkladam aktualitu do DB nebo spise pred timto mistem bych potreboval jeste ulozit infomaci o tom, kdy byla aktualita pridana.
Nasel jsem v API funkci Tools::createDateTime(), ktere bych
jako parametr predal time(), takze by mi ta funkce mela vratit
aktualni cas DateTime53(date('Y-m-d H:i:s', $time)) (ve chvili kdyz
uzivatel stiskl submit).
Jak mam prosim vas zaridit, aby kdyz volam
$news->insert($form->getValues());, tak abych v paramtru
metody insert mel uz tu informaci o tom, kdy byla aktualita
pridana? Ne ale abych metode insert predaval dva parametry, ale jen
jeden a to konkretne $form->getValues().
Metoda insert vypada takto:
public function insert(array $data)
{
return $this->db->insert($this->table, $data)->execute(dibi::IDENTIFIER);
}
Pri debugovani jsem si vsiml, ze data jsou ulozena z formulare jsou ulozena
v promenne $form['htmlData']['napr_TextArea_obsah'], ale nevim
jestli je to k necemu dobre pro to co potrebuju.
Verim, ze uz jste tohle nekdo resili, tak bych poprosil o nejake pekne reseni.
Dekuji.
Offline
#2 7. 3. 2010 15:17
- 22
- Nette guru

- Místo: Brno
- Registrovaný: 18. 1. 2010
- Příspěvky: 215
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
podle mě stačí přidat třeba…
$news['datum'] = new DateTime();
eventuelně si zformátovat, jak potřebuješ http://cz.php.net/…e.format.php
Offline
#3 7. 3. 2010 15:24
- Ola
- Nette guru
- Registrovaný: 21. 10. 2008
- Příspěvky: 477
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
uděláš
$values = $form->getValues();
$values['date'] = new DateTime;
a pak jen těm metodám předáš pole $values
Offline
#4 7. 3. 2010 15:39
- Endrju
- Člen

- Místo: Ostrava
- Registrovaný: 31. 10. 2009
- Příspěvky: 131
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
to 22: vyhazuje Fatal error: Cannot use object of type News as array
Ola napsal(a):
uděláš
$values = $form->getValues(); $values['date'] = new DateTime;a pak jen těm metodám předáš pole
$values
Diky Ola, tohle funguje :).
Jeste si dovolim malou otazecku: V databazi to mam jako typ datetime, aby mi
to generovalo datum i cas. Jak to pak v sablone (predpokladam, ze bych to mel
udelat tam, nebo v render akci?) preformatuju? Metoda mi vrati datum a cas
YYYY-MM-DD HH:MM:SS zformatovy podle retezce Y-m-d
H:i:s v metode public static function createDateTime($time)
Offline
#5 7. 3. 2010 15:43
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
date('d.m.Y H:i:s', strtotime($data['date']));
Formát si uprav :)
Offline
#6 7. 3. 2010 15:52
- Endrju
- Člen

- Místo: Ostrava
- Registrovaný: 31. 10. 2009
- Příspěvky: 131
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Dik :).
Klasicka PHP uprava, nj :). Jsem prave nevedel, jestli nema Nette nejakou specialutku pro to ve stylu kratsiho zapisu, ale tohle uplne staci :)
Editoval Endrju (7. 3. 2010 15:55)
Offline
#7 7. 3. 2010 16:58
- Ola
- Nette guru
- Registrovaný: 21. 10. 2008
- Příspěvky: 477
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
V šabloně by mělo jít něco jako
{$datum|date:'%d.%m.%Y'}
Offline
#8 7. 3. 2010 17:42
- Endrju
- Člen

- Místo: Ostrava
- Registrovaný: 31. 10. 2009
- Příspěvky: 131
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Ola, diky. Nenapadlo me se podivat na Helpery. Nejak mi to ale nefunguje..
Napisu v sablone:
{$newsItem->added|date:'%d.%m.%Y %H:%i:%s'}
ale na strance to nevypise vubec nic, pritom do temp se to prelozi takto:
<?php echo TemplateHelpers::escapeHtml($template->date($newsItem->added, '%d.%m.%Y %H:%i:%s')) ?>
Nemuze tam byt chyba?
Puvodne jsem to mel takto a fungovalo:
{=date('d.m.Y H:i:s', strtotime($newsItem->added))}
Editoval Endrju (7. 3. 2010 19:18)
Offline
#9 7. 3. 2010 19:19
- Endrju
- Člen

- Místo: Ostrava
- Registrovaný: 31. 10. 2009
- Příspěvky: 131
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Jeste me napadlo, jestli neni nutne nacist?
$this->template->registerHelper('date');
Ale kdyz je to zapisem
{$today|date:'%d.%m.%Y'}
tak si s tim poradi Latte filter, nebo ne?
Offline
#10 7. 3. 2010 19:29
- redhead
- Nette guru
- Registrovaný: 2. 5. 2009
- Příspěvky: 630
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Pokud nevytváříš vlastní šablonu, tak ta defaultní to má vše již registrované.
Offline
#11 7. 3. 2010 19:43
- Endrju
- Člen

- Místo: Ostrava
- Registrovaný: 31. 10. 2009
- Příspěvky: 131
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Vlastni sablonu? Jak to poznam? Pravdepodobne asi vlastni nevytvarim..
porad ale nevim proc se mi v kodu nevypise vubec nic, kdyz zavolam
<div id="left">{$newsItem->added|date:'%d.%m.%Y %H:%i:%s'}</div>
Kdyz si necham zobrazit v prohlizeci zdrojovy kod, tak tam nic neni:
<div id="left"></div>
V adresari temp je tento vygenerovany kod:
<div id="left"><?php echo TemplateHelpers::escapeHtml($template->date($newsItem->added, '%d.%m.%Y %H:%i:%s')) ?></div>
Neni tam neco spatne? Proc se to nezobrazuje?
Offline
#12 7. 3. 2010 20:04
- redhead
- Nette guru
- Registrovaný: 2. 5. 2009
- Příspěvky: 630
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
vlastní šablona – $this->template = new Template;
ale tipuju, že máš tu defaultní presenterovskou. Určitě máš v té proměnné validní datum/čas?
Offline
#13 7. 3. 2010 20:20
- Endrju
- Člen

- Místo: Ostrava
- Registrovaný: 31. 10. 2009
- Příspěvky: 131
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Ne, tak vlastni sablonu nepouzivam. Diky za objasneni.
Promenna $newsItem->added drzi napriklad takove datum
2010-03-07 19:37:26, ktere nacitam z DB. Nevim jak az moc sikovny
je ten helper, zda si s tim poradi. Jen jsem to udelal tak, jak mi
poradili.
Offline
#14 7. 3. 2010 20:24
- Etch
- Člen
- Registrovaný: 24. 9. 2008
- Příspěvky: 109
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
No nefunguje ti to protože ten zápis máš špatně
{$newsItem->added|date:'%d.%m.%Y %H:%i:%s'}
uprav na
{$newsItem->added|date:'d.m.Y H:i:s'}
znak % tam nemá vůbec co dělat.
Offline
#15 7. 3. 2010 20:25
- redhead
- Nette guru
- Registrovaný: 2. 5. 2009
- Příspěvky: 630
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
tím si nejsem tak jistej:
Offline
#16 7. 3. 2010 20:40
- Etch
- Člen
- Registrovaný: 24. 9. 2008
- Příspěvky: 109
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Tak to pardon. % tam může být nic méně to sním nefunguje.
Offline
#17 7. 3. 2010 20:49
- redhead
- Nette guru
- Registrovaný: 2. 5. 2009
- Příspěvky: 630
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Tak možná bug. Ono podle kódu by měli obě varianty fungovat (http://api.nette.org/…ers.php.html#a202)
Offline
#18 7. 3. 2010 21:01
- Endrju
- Člen

- Místo: Ostrava
- Registrovaný: 31. 10. 2009
- Příspěvky: 131
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Aha, ty jo.. to me prave zarazilo… Zkusil jsem to bez tech znaku % a funguje, ale vubec by me to nenapadlo prave proto, ze v dokumentaci http://doc.nette.org/…late-helpers#… to je se znakem % pouzito a jiny alternativa tam neni.
Asi to bude tedy bugged, nahlasite to nekdo? (pak by bylo dobre sem napsat jak to dopadlo, aby to bylo pohromade…)
Kazdopadne diky, nenapadlo by me to.
Editoval Endrju (7. 3. 2010 21:26)
Offline
#19 7. 3. 2010 21:30
- Ola
- Nette guru
- Registrovaný: 21. 10. 2008
- Příspěvky: 477
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Imho je problém v tom, že funkce strftime nemá modifikátory %i a %s, ale %M a %S. Viz její dokumentace: http://php.net/strftime
Editoval Ola (7. 3. 2010 21:33)
Offline
#20 7. 3. 2010 21:44
- Endrju
- Člen

- Místo: Ostrava
- Registrovaný: 31. 10. 2009
- Příspěvky: 131
Re: Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
Mas pravdu Ola, zkusil jsem to zapsat takto:
<div id="left">{$newsItem->added|date:'%d.%m.%Y %H:%M:%S'}</div>
a v pohode se to zobrazi. Takze zadny bug, ale chyba mezi klavesnici a zidli.. :). Mohlo by to hodit ale nejake upozorneni O:)
Offline
Stránky: 1
- Úvodní stránka
- » Hlášení chyb
- » Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()


