#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

gmvasek
Nette guru
Místo: Brno
Registrovaný: 19. 3. 2009
Příspěvky: 249
Web

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:

http://doc.nette.org/…late-helpers#…

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

 

Zápatí