Globální formátování datumů
- nanuqcz
- Člen | 822
Ahoj,
představme si, že jsem právě dokončil webovou aplikaci. Zde se pracuje
s různými entitami, které se ukládají do DB a každá z nich obsahuje
položku „created“ a „last_modified“ (datum). Všechny datumy teď
zobrazuju ve formátu ‚YYYY-MM-DD‘, protože tak se ukládají i do
databáze.
Co když se ale najednou rozhodnu, že všechny datumy chci zobrazovat (v šablonách, ve formulářích) ve formátu ‚DD.MM.YYYY‘? V současné době to umím udělat jen takto:
{****** Zobrazení v šabloně ******}
// Starý kód
Vytvořeno: {$values->created}
Naposledy upraveno: {$values->last_modified}
// Nový kód
Vytvořeno: {$values->created|date:'d.m.Y'}
Naposledy upraveno: {$values->last_modified|date:'d.m.Y'}
/****** Plnění formuláře ******/
// Starý kód
$this['form']->setDefaults($values);
// Nový kód
$this['form']->setDefaults($values);
$this['form']['created']->setDefaultValue($values->created->format('d.m.Y'));
$this['form']['last_modified']->setDefaultValue($values->last_modified->format('d.m.Y'));
/****** Ukládání hodnot do DB ******/
// Starý kód
$values = $form->values;
// Nový kód
$values = $form->values;
$values->created = DateTime::from($values->created); // MySQL nedokáže správně uložit datum 'DD.MM.YYYY'
$values->last_modified = DateTime::from($values->last_modified);
A toto musím udělat pro všechny entity, které pracují s nějakým datumem, zvlášť! Pro všechny jejich výpisy, ukládání do DB apod. Neexistuje v Nette nějaká elegantnější cesta? Představoval bych si něco takového:
/****** Nastavení ******/
Nette\DateTime::setDefaultFormat('d.m.Y'); // nastavení metody __toString() - pro zobrazení v šablonách a ve formulářích
Nette\Forms\Controls\DateTimeInput::setDefaultFormat('Y-m-d'); // takováto hodnota vyleze z $form->getValues()
/****** Použití ******/
// Formuláře
$form->addDateTime('created', 'Vytvořeno');
// Šablony
//(netřeba změny)
Díky za názory
- nanuqcz
- Člen | 822
enumag napsal(a):
Pokud jde o šablony tak tam by to automaticky být dle mého názoru nemělo, maximálně bych si napsal vlastní helper jako zkratku.
Přemýšlel jsem nad tím, a spíš než nastavovat třídu DateTime (jak
jsem chtěl původně) mi přijde lepší nastavovat latte helper
date
. V šabloně by pak šlo napsat jen
{$values->created|date}
a defaultní formát onoho date
by se nastavil třeba v
config.neon
, nebo někde…
(nebo třeba v @layout.latte pomocí nějakého makra?
{dateFormat 'm.d.Y'}
by se mi docela líbilo)
Zbytek se mi líbí, co jsi napsal ohledně toho
DateTimeInput
:-)
Editoval nanuqcz (5. 11. 2013 20:13)
- llook
- Člen | 407
Helper date si můžeš nakonfigurovat globálně pomocí Nette\Templating\Helpers::$dateFormat.