Jak po odeslání formuláře přidat „časové razítko“, Tools::createDateTime()
- Endrju
- Člen | 147
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.
- 22
- Člen | 1478
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
- Endrju
- Člen | 147
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)
- Endrju
- Člen | 147
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)
- Endrju
- Člen | 147
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?
- redhead
- Člen | 1313
Tak možná bug. Ono podle kódu by měli obě varianty fungovat (https://api.nette.org/…ers.php.html#202)
- Endrju
- Člen | 147
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 https://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)
- Ola
- Člen | 385
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)