Jak vypisovat v Latte šabloně měsíc a den v týdnu česky?
- Saavikam
- Člen | 17
Ahoj,
omlouvám se svůj dotaz, ale nějak jsem se zasekla. V Latte vypisuji datum
klasicky
<?php
{$blok_data->drama_date|date:'j. n. Y'}
?>
A ráda bych k tomu ještě přidala den v týdnu a měsíc, obé česky. Běžně jsem používala něco podobného:
<?php
echo cesky_den(date("w"))." ".date("j").". ".cesky_mesic(date("n"))." ".date("Y");
?>
V prezenteru bych to uměla, ale tam to podle mého názoru nepatří. Je to
záležitost šablony.
Je mi jasné, že si budu muset vytvořit vlastní Latte šablonu (filtr), ale
nějak nevím jak.
Prosím o pomoc.
Děkuji
Andrea
- Darkling
- Člen | 35
Ahoj, vlastní filtr vytvoříš takto:
<?php
// BasePresenter
protected function createTemplate($class = NULL) {
$template = parent::createTemplate($class);
$template->addFilter('czechdate', function ($date) {
// tvůj kód pro převedení na české měsíce, asi něco jako
$czechMonths = ['ledna', 'února'] // atd.
return $date->format('j') . '. ' . $czechMonths[$date->format->('n') - 1] . ' ' . $date->format->('Y');
});
return $template;
}
?>
V šabloně pak klasicky:
<?php
{$blok_data->drama_date|czechdate}
?>
Psáno z hlavy. Snad pomůže.
Editoval Darkling (5. 4. 2016 19:03)
- Oli
- Člen | 1215
Ahoj,
mám pro filtry vlastní třídu Filters
, která vypadá
nějak takhle
class Filters extends Object
{
public static function addFilters($template)
{
$template->addFilter('atReplace', function($s){
return str_replace('@', '@', $s);
});
// volá se s parametrem 'w'
$template->addFilter('dayName', function ($day, $lang = 1) {
if ($lang === 1)
{
$name = array('Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota');
} else
{
$name = array('Sunday ', 'Monday ', 'Tuesday ', 'Wednesday ', 'Thursday ', 'Friday ', 'Saturday ');
}
return $name[$day];
});
}
}
Připojíš to potom tam kam potřebuješ (komponenta/presenter) takhle
protected function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
return \Akkon\Filters::addFilters($template);
}
A jestli jsem na nic nezapomněl, tak by to mělo být vše.
- Saavikam
- Člen | 17
Ahoj,
děkuju za pomoc. Vytvořila jsem si třídu Filters.php a do BasePresenter.php
přidala createTemplate.
Ve Filters.php mám static funkce
public static function weekdateCZ($date) {
$weekdate_name = array('neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota');
return $weekdate_name[(integer)$date->format('w')];
}
public static function dateCZ($date, $format) {
$month = ["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"];
...
}
kde $format je obdoba jako u Datetime, jen dny v týdnu a měsíce (pokud ve $format je parametr ‚F‘ nebo ‚M‘) píše česky.
Moc děkuju.
A
- jahudka
- Člen | 71
Nebo taky pridat si nekam do bootstrapu nejaky
setlocale(LC_TIME, 'cs_CZ.utf8')
a pouzit strftime()
:-) vychozi latte filtr date
si ho dokonce umi pouzit sam, pokud
formatovaci retezec obsahuje znak %
. Je ale potreba mit
nainstalovany vsechny locale ktery chces podporovat a ten locale identifikator
(‚cs_CZ.utf8‘) muze bejt na ruznejch systemech ruznej, takze s tim muze
bejt trochu opruz.. ale pokud mas vsechny systemy kde ta appka pojede nejak
rozumne „pod kontrolou“ (tj. developeri nejsou uplny lamy a umej si poladit
environment + nastavis vsechny test / CI / produkcni servery) tak to je
super ;-)
Editoval jahudka (28. 7. 2016 17:56)