Форматирование дат
Многие не знают, что в MODX Revolution можно очень просто форматировать даты и выводить их на русском языке.
Выводим день, месяц прописью и год.
[[+publishedon:strtotime:date=`%d %b %Y`]]
//30 Apr 2012
Для появления русского языка в начале шаблона нужно вызвать сниппет setLocale:
<?php
setlocale(LC_ALL, "ru_RU.UTF-8");
Есть еще вариант указать эту же локаль в системных параметрах, но бывают рэндомные искажения дат в админке потом. Лично у меня - нормально работает.
Проверяем:
[[+publishedon:strtotime:date=`%d %b %Yг.`]]
//30 Aпр 2012г.
Кстати, все функции использующие локали начнут понимать по-русски. Если вам нужно установить локаль только для функций времени, то используйте не LC_ALL, а LC_TIME. Подробнее о локалях.
Установка локали может не работать на криво настроенных хостингах, где просто отсутствует русская локаль - тогда месяц так и будет выводиться на английском. Все равно у вас остается возможность сделать вот так:
[[+publishedon:strtotime:date=`%d.%m.%Yг.`]]
//30.04.2012г.
Почитать про функцию форматирования даты strftime можно тут.
Если очень нужно вывести месяц на русском, но хостинг - вредина, то используйте вот этот сниппет dateRU.
<?php
$month_arr = array('01' => 'Янв',
'02' => 'Фев',
'03' => 'Мар',
'04' => 'Апр',
'05' => 'Мая',
'06' => 'Июн',
'07' => 'Июл',
'08' => 'Авг',
'09' => 'Сен',
'10' => 'Окт',
'11' => 'Ноя',
'12' => 'Дек'
);
$time = strtotime($input);
$month = strftime('%m', $time);
$day = strftime('%d', $time);
$year = strftime('%Y', $time);
return "$day $month_arr[$month] $year";
Вызывать вот так:
[[+publishedon:dateRU]]г.
//30 Апр 2012г.
0
👍
👎
❤️
🔥
😮
😢
😀
😡
10 821
18.06.2012 13:46:06
17 комментариев
Нашёл вот такое решение: 1. В файле index.php в корне modx(!) пишем: setlocale(LC_TIME, "ru_RU.UTF8"); 2. В настройках системы, в словарь и язык находим "locale" и пишем: ru_RU.UTF8 Профит.
П.С. Полагаю, если это объединить с описанным Василием, то всегда, везде и во всех позах LANG у дат будет RU. А вот не будет ли избыточности, вопрос отдельный, хотя и не критичный, думаю.
Bond Nataly
а не подскажете, как на хостинге(VPS) настроить локаль?
У меня после установки свойства locale в LC_TIME,"ru_RU.UTF-8" выводится следующее
04 ���� 2013
Во, блин, сюжет... В трёх местах нормально всё, в четвёртом 01 Янв 1970 выводит - ГЫ?! :0) Как лечить и откуда ноги растут?
А без фильтра ту же дату как выводит? Такое ощущение, что она просто пустая, возможно с кэшированием глюки.
Сергей
[[+publishedon]] замени на [[*publishedon]]
Чикин Артур
А в админке разве нельзя установить ЛОКАЛЬ? Пункт локаль.
А заметку прочитать?
Антон Матвеев
делал при помощи pdoResources вывод новостей и столкнулся с таким...
на той странице где несколько превью новостей ---
шаблон news-tpl:
Все выводится верно, кроме - publishedon. Тут появляются непонятные цифри или "0", а если применить форматирование даты то вообще пусто. Долго пытался понять, что же и почему оно не выводится... ведь раньше уже так делал
Установсил getResources заменил вызов и все стало как нужно
Видимо что то не так реализованно, или я что то не дописал ?
Антон Матвеев
Спасибо, помогло. А почему фильтр :strtotime уже не нужно писать ? насчет этого ни где не встречал информации
Потому, что данные в БД и так хранятся в timestamp, а pdoTools работает именно с ней, без преобразований.
P.S. Старайся нажимать на ссылку "Ответить", если ты отвечаешь на комментарий.
Aleksey Yakovlev
и все же что-то не так я делаю. перехожу с getresources на pdo. вместо даты из TV EventDate выдает "1 января 1970 года". в вызове TV включено: "... &includeTVs=pageImg, EventDate, EventPlace &sortby=EventDate ...". В шаблоне регулируется формат даты TV [[+tv.EventDate:date=%e %B %Y]]. Если форматирование в шаблоне убрать - выводит указанную в Tv правильную дату, но слишком подробно. В вызов добавлял и processTVs=1 и prepareTVs=1, но ничего не меняется. В крайнем случае можно наверное отформатировать вывод TV в настройках самого TV, но хотелось бы оставить себе пространство для маневра и брать его по умолчанию. Где ошибка?
Ошибка в том, что для ТВ параметров обычно как раз нужен strtotime, а processTVs должно быть отключено, иначе ТВ отформатируется согласно своих настроек.
Если в БД "245689123647" - то strtotime не нужно использовать. В таком виде хранятся даты у ресурсов сайта. Если в БД "2014-10-12 12:15" - то strtotime нужен, чтобы привести дату к секундам и её можно было отформатировать.
Понятно?
Aleksey Yakovlev
супер, спасибо!
Может кому то пригодится. Для мультиязычности (babel) можно использовать конструкцию: (не забываем в настройки контекста добавить поля locale - т.е. значения для русскоязычной версии к примеру 'ru_RU.UTF-8' для en 'en_US.UTF-8'); Сниппет setLocale: <?php $locale = $modx-?>
getOption('locale',null,'ru_RU.UTF-8'); setlocale(LC_ALL, $locale);
Алексей
Интересно, как узнать, установлена ли у сервера русская локаль? к примеру вот тут: http://minishop2.com/manager/?a=81 на английском названия дат - у меня также. Хотелось бы по-русски но не могу никак докопаться в чем же все-таки дело.
bezumkin.ru
Личный сайт Василия Наумкина
Прямой эфир
Дмитрий
08.02.2025 09:09:01
Спасибо за ответ. Есть желание разобраться самому. Прочитал все ваши статьи и понял, что VESP перспе...
Василий Наумкин
04.02.2025 19:27:08
Я таким давно не занимаюсь и с MODX не работаю.
Попробуйте обратиться к ребятам с modx.pro.
Василий Наумкин
23.12.2024 05:33:00
В MODX сначала создали проблему, автоматически генерируя адреса, а потом "решили" заморозкой.
Так ч...
Дмитрий
14.12.2024 09:10:38
Василий, прошу прощения, тупанул, не разобрался сразу. Фреймворк отличный! "Чистый лист" на vue, рис...
Василий Наумкин
05.12.2024 20:01:14
В итоге основная ошибка была в неправильном общем root в Nginx, из-за чего запросы не улетали на фай...
Василий Наумкин
01.07.2024 11:56:41
Да, верно, именно так.
А в контроллере, скорее всего, ловить данные методом post.
Василий Наумкин
26.06.2024 09:38:15
О, точно, вылезает если не залогинен.
Спасибо, исправил!
Уровни подписки
Спасибо!
500 ₽ в месяц
Эта подписка ничего не даёт, просто возможность сказать спасибо за мои заметки. Подписчики отмечаются зелёненьким цветом в комментариях.
Большое спасибо!
1 000 ₽ в месяц
И эта подписка не даёт ничего, кроме оранжевого цвета в комментариях и возможности сказать спасибо, но уже большое!