Добрый день. Я занимаюсь web-разработкой и почти всем, что с этим связано.

Вывод даты на русском в MODX Revolution

Привет всем. В этой небольшой статейке я расскажу о том, как выводить дату на русском языке в MODX Revolution. Вывод красивой даты, где название месяца выводится на русском языке, я реализовал с помощью системы фильтров ввода/вывода . Кстати, сниппет также можно расширить для других языков, сейчас сниппет поддерживает в том числе английский и украинский.

Дата для людей
Дата для людей

Сразу приведу код фильтра. Для того, чтобы его использовать, нужно создать сниппет (я назвал его russianDate) и вставить туда этот код.

// Сначала язык берётся из системных настроек
$cultureKey = $modx->getOption('cultureKey');
// Переопределение из параметров сниппета
$cultureKey = $modx->getOption('cultureKey', $scriptProperties, $cultureKey);

// Массив названий месяцев
switch ($cultureKey) {
	case 'en':
		$monthes = 'january, february, march, april, may, june, july, august, september, october, november, december';
		break;
	case 'ua':
		$monthes = 'січень,лютий,березень,квітень,травень,червень,липень,серпень,вересень,жовтень,листопад,грудень';
		break;
	case 'ru':
	default:
		$monthes = 'января, февраля, марта, апреля, мая, июня, июля, августа, сентября, октября, ноября, декабря';
		break;
}

$monthes = explode(',', $monthes);
array_unshift($monthes, '');

// Название месяца
$monthName = trim($modx->getOption(date('n', $input), $monthes, ''));

// Будущий результат
$output = $options;

// Замена стандартных значений
$chars = 'HisdjY';
for ($i = 0; $i < strlen($chars); $i++) {
	$output = str_replace('%'.$chars[$i], date($chars[$i], $input), $output);
}

// Название месяца
$output = str_replace('%month', $monthName, $output);
return $output;

В первой строке мы создаём массив названий месяцев, где номер месяца соответствует индексу элемента. Во второй строке анализируется входной параметр ($input), которая представляет из себя временную метку (timestamp), из неё извлекается номер месяца и затем в переменную $monthName заносится значение элемента массива $monthes по индексу, равному номеру текущего месяца. В последней строке элементы даты (день, название месяца и год) собираются вместе и возвращаются.

Пример использования

Использовать этот фильтр нужно следующим образом. Если вы используете не getResources, а pdoResources, то вызов модификатора strtotime можно убрать, так как pdoResources возвращает дату в формате UNIX (timestamp).

<time datetime="[[+publishedon:strtotime:date=`%Y-%m-%d`]]" itemprop="datePublished">
	[[+publishedon:strtotime:russianDate=`%j %month %Y`]]
</time>

Вот и всё.

Комментарии