За обновлениями можно следить в telegram-канале https://t.me/quasiart

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

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

Исходный код

Это дополнение я разместил на GitHub: https://github.com/mishantrop/quasidate , там всегда содержится последняя версия.

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

<?php
/**
 * https://quasi-art.ru/
 * 2015-2017
 */
// Сначала язык берётся из системных настроек
$cultureKey = $modx->getOption('cultureKey');
// Переопределение из параметров сниппета
$cultureKey = $modx->getOption('cultureKey', $scriptProperties, $cultureKey);
$input = (int)$input;

// Language data
switch ($cultureKey) {
	case 'en':
		$monthes = 'january, february, march, april, may, june, july, august, september, october, november, december';
		$weekdays = 'Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday';
		break;
	case 'ua':
		$monthes = 'січня, лютого, березня, квітня, травня, червня, липня, серпня, вересня, жовтня, листопада, грудня';
		$weekdays = 'Понеділок, Вівторок, Середа, Четвер, П\'ятниця, Субота, Неділя';
		break;
	case 'ru':
	default:
		$monthes = 'января, февраля, марта, апреля, мая, июня, июля, августа, сентября, октября, ноября, декабря';
		$weekdays = 'Понедельник, Вторник, Среда, Четверг, Пятница, Суббота, Воскресенье';
		break;
}

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

$monthName = trim($modx->getOption(date('n', $input), $monthes, ''));
$weekdayName = trim($modx->getOption((date('w', $input)+6)%7, $weekdays, ''));

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

// Название месяца
$output = str_replace('%month', $monthName, $output);
$output = str_replace('%weekday', $weekdayName,	$output);
// Замена стандартных значений
$chars = 'HisdjmwY';
$charsLength = strlen($chars);
for ($i = 0; $i < $charsLength; $i++) {
	$output = str_replace('%'.$chars[$i], date($chars[$i], $input), $output);
}

return $output;

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

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

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