Jak vypisovat v Latte šabloně měsíc a den v týdnu česky?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Saavikam
Člen | 17
+
0
-

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
+
+2
-

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
+
+2
-

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('@', '&#64;', $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
+
0
-

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

looky
Člen | 99
+
+1
-

Filtry jdou registrovat i přes config, nějak takhle:

services:
	latte.latteFactory:
		setup:
			- addFilter('czechdate', [@mojeFiltry, 'czechdate'])
jahudka
Člen | 71
+
0
-

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)

Myiyk
Člen | 321
+
0
-

Nebo to vypisovat anglicky, ale přes překladač