Новые возможности форматирования дат
33
В версии 0.4 значительно улучшены возможности по работе с датами. Ввиду большого числа писем по этому поводу, опишу здесь основные моменты и правила пользования новыми параметрами форматирования дат:0. Вступление.
За оформление даты в Smarty-шаблоне отвечает тот же, что и раньше, smarty-тег {date_format}. Тег требует только один обязательный параметр 'date' — собственно дата. Простейший вариант вывода:
{date_format date=$oTopic->getDateAdd()}в результате получаем самый обычный:
10 декабря 2009, 00:35
Информация для разработчиков: date_format работает теперь не через функцию в function.php, а через специально написанный для движка smarty-плагин.
1. Многоязычность и поддержка нескольких форм склонений в названиях месяцев.
Названия месяцев задаются в lang-файле (по умолчанию russian.php) в виде двухмерного массива. Для каждого месяца можно указывать произвольное число склонений. Например,
...
'date_month_1' => array('январь','января','январе'),
...
По умолчанию, будет использовано второе склонение, если нужно другое, его индекс нужно указать с помощью параметра «declination». В совокупности с параметром «format», вы можете поменять вывод даты, например на такой:
{date_format date=$oTopic->getDateAdd() format="Y, F, d" declination="0"}на выходе получим:
2009, декабрь, 10
Параметр 'format' работает также, как , за исключением того, что F (полнотекстовое название месяца) будет заменено на нужный язык и выбранное склонение.
2. «Вчера», «Сегодня», «Завтра».
Дополнительный параметр 'day' дает возможность выводить сообщения такого типа:
Сегодня в 03:00
Для этого достаточно указать следующие настройки:
{date_format date=$oTopic->getDateAdd() day="day H:i"}(day подставляется из lang-файла, согласно временному соответствию — «Вчера в », «Сегодня в», «Завтра в»).
'day' является «параметром-надстройкой» и никак не влияет на основное значение формата. Т.е. если ваша запись была сделана позавчера, то дата будет отформатирована согласно 'format' (или по-умолчанию, если таковой не передан).
3. Только что.
Для того, чтобы указать вместо конкретного значения даты такое:
Только что
Нужно добавить в тег параметр 'now'. Значение now указывает на количество секунд, в течение которых дата будет считаться только что произошедшей.
{date_format date=$oTopic->getDateAdd() now="60"}Такое правило форматирования будет помечать топик «Только что» в течении 1 минуты с момента написания.
4. Обратный отсчет.
Доступны два режима обратного отсчета: "__ минут назад" и "__ часов назад". Для получения такого эффекта в отображении даты необходимо использовать параметры 'minutes_back' и 'hours_back' соответственно. При этом будет выведено что-то в стиле:
142 минуты назад
или
2 часа назад
'minutes_back' указывается в минутах, 'hours_back' в часах. Параметры работают независимо друг от друга. Плагин самостоятельно следит за склонением существительных «минута», «час» (настройки задаются через lang-файл).
5. Подведем итоги.
Формат типа
{date_format date=$oTopic->getDateAdd() hours_back="12" minutes_back="60" now="60" day="day H:i" format="d F Y, H:i"}будет 1 минуту отображаться как «Только что», в течении часа как "__ минут назад", в течении 12 часов как "__ часов назад", после 12 часов до окончания 2х суток будет смотреться как «Сегодня в часы: минуты» \ «Вчера в часы: минуты», в остальное время будет отображен как и стандартная дата LS.
Экспериментируйте! Пожелания, баги — милости прошу в комментарии.
- +20
- 14 декабря 2009, 06:36
- kachayev
подскажите, кроме russian.php ну и соответствующего шаблона, что-то еще нужно изменять? добавила в рашен.пхп
'day' => array('Вчера в ','Сегодня в','Завтра в'),
'minutes_back' => ' минут назад',
'hours_back' => ' часов назад',
'now' => 'Только что', ну а также всех месяцев… что же еще нужно изменить...?
В SVN версии все готово, там ничего доделывать не нужно.
Для использования в 0.3.1 перетянуть соответствующие куски Lang файла, два смарти-плагина (date_format, declention), отключить во Viewer`e определение smarty-функции date_format, обновить модуль LsLang (туда тоже добавлены некоторые новые возможности, которые используются данным плагином)…
И, кажется, все. Хотя мог что-то упустить из виду.
Для использования в 0.3.1 перетянуть соответствующие куски Lang файла, два смарти-плагина (date_format, declention), отключить во Viewer`e определение smarty-функции date_format, обновить модуль LsLang (туда тоже добавлены некоторые новые возможности, которые используются данным плагином)…
И, кажется, все. Хотя мог что-то упустить из виду.
Ссылаясь на документацию Smarty по работе с , хотелось бы задать такой вопрос: будет ли в движке в шаблоны передаваться именно timestamp (unix time), а не mysql-строка, содержащая информацию о дате и времени? Возникла необходимость сравнить в шаблоне две даты и как-то на результат сравнения среагировать. Smarty дату в формате юникс-тайм нормально должен обработать модификатором date_format, а вот date_rus из коробки выдаёт 1970 год.
Подправить под себя я могу, но хотелось бы, чтобы в движке всё красиво было по дефолту.
Спасибо.
Подправить под себя я могу, но хотелось бы, чтобы в движке всё красиво было по дефолту.
Спасибо.
Не понял, что значит вот это:
Что за mysql-срока? В параметр date во всех шаблонах передается дата в формате, стандартном для сущностей: «Y-m-d, H:i:s». Но плагин прекрасно понимает и timestamp.
Вот этого замечания тоже не понял:
Плагин date_format специально разработан для этого движка, чтобы пользователи могли сделать дату так, как они сами считаю красивым. Если вам кажется, что удобнее пользоваться нативными smarty-средствами, пожалуйста, пользуйтесь. Но кто сказал, что это будет красивше?
mysql-строка, содержащая информацию о дате и времени
Что за mysql-срока? В параметр date во всех шаблонах передается дата в формате, стандартном для сущностей: «Y-m-d, H:i:s». Но плагин прекрасно понимает и timestamp.
Вот этого замечания тоже не понял:
чтобы в движке всё красиво было по дефолту
Плагин date_format специально разработан для этого движка, чтобы пользователи могли сделать дату так, как они сами считаю красивым. Если вам кажется, что удобнее пользоваться нативными smarty-средствами, пожалуйста, пользуйтесь. Но кто сказал, что это будет красивше?
Из чтения документации mysql, я понял, что даты там хранятся не в unix-time, а в каком-то таком виде
А это был не на date_format наезд, а на такие конструкции
:
Я бы предложил сделать везде вот так:
'0000-00-00 00:00:00'. Ну и напрямую сравнить например {$oTopic->getDateAdd()} и {$smarty.now} нельзя.Но плагин прекрасно понимает и timestampГм. Посмотрю внимательней. Но при попытке скормить ему результат функции strtotime() я получил 1 января 1970 года. Обновлю этот момент до версии из транка.
Вот этого замечания тоже не понял
А это был не на date_format наезд, а на такие конструкции
strtotime($oTopic->getDateAdd())<$smarty.now в шаблоне.:
This allows template designers to use the date_format modifier for full control over date formatting, and also makes it easy to compare dates if necessary.Вот о чём я.
Я бы предложил сделать везде вот так:
public function getDate() {
return strtotime($this->_aData['date']);
}и сеттеры соответственно изменить.Плагин date_format специально разработан для этого движкаТо есть, это не из стандартной поставки Smarty?
Комментарии (18)
RSS свернуть / развернуть