Пользователь
Сообщений: 167
Зарегистрирован: 18.05.2014 12:23
|
Особенности
Полная реализация русскоязычной записи даты на портале, включая отображение даты виде прошедшего периода.
Примеры
- 18 мая 2014
- Май, 18 2014
- только что
Реализация
Дополнение не затрагивает интерфейса. Для применения на различных версиях привожу только дополнительный код, который нужно вставить (поменять) в следующих файлах:
1) /locale/Russian/admin/settings.php
2) /locale/Russian/global.php
3) /administration/settings_time.php
4) /maincore.php
settings.php
Создаем идентификаторы формата даты.
В конце файла: все периоды можете оставить по своему усмотрению. Добавляем первую главную строчку и немного правим то что есть:
GeSHi: PHP $locale['dateformats'][] = "period"; $locale['dateformats'][] = "%m/%d/%Y"; $locale['dateformats'][] = "%d/%m/%Y"; $locale['dateformats'][] = "%d-%m-%Y"; $locale['dateformats'][] = "%d.%m.%Y"; $locale['dateformats'][] = "%m/%d/%Y %H:%M"; $locale['dateformats'][] = "%d/%m/%Y %H:%M"; $locale['dateformats'][] = "%d-%m-%Y %H:%M"; $locale['dateformats'][] = "%d.%m.%Y %H:%M"; $locale['dateformats'][] = "%m/%d/%Y %H:%M:%S"; $locale['dateformats'][] = "%d/%m/%Y %H:%M:%S"; $locale['dateformats'][] = "%d-%m-%Y %H:%M:%S"; $locale['dateformats'][] = "%d.%m.%Y %H:%M:%S"; $locale['dateformats'][] = "%b %d %Y"; $locale['dateformats'][] = "%d. %B %Y"; $locale['dateformats'][] = "%d %B %Y"; $locale['dateformats'][] = "%b %d %Y %H:%M"; $locale['dateformats'][] = "%d. %B %Y %H:%M"; $locale['dateformats'][] = "%d %B %Y %H:%M"; $locale['dateformats'][] = "%b %d %Y %H:%M:%S"; $locale['dateformats'][] = "%d. %B %Y %H:%M:%S"; $locale['dateformats'][] = "%d %B %Y %H:%M:%S";
Добавлено за 0.051 секунд, используя GeSHi 1.0.8.10
global.php
Создаем массивы русскоязычного формирования даты
раздел // Full & Short Months пишем так:
GeSHi: PHP // Full & Short Months $locale['months'] = " |января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря"; $locale['shortmonths'] = " |Январь|Февраль|Март|Апрель|Май|Июнь|Июль|Август|Сентябрь|Октябрь|Ноябрь|Декабрь"; $locale['periods_name'] = "только что|5 минут назад|10 минут назад|20 минут назад|полчаса назад|час назад|2 часа назад|4 часа назад|12 часов назад|вчера|позавчера|3 дня назад|4 дня назад|5 дней назад|6 дней назад|на прошлой неделе|2 недели назад|3 недели назад|в прошлом месяце|2 месяца назад|3 месяца назад|полгода назад|в прошлом году|2 года назад|3 года назад|4 года назад|5 лет назад|6 лет назад|7 лет назад|8 лет назад|9 лет назад|10 лет назад|15 лет назад|20 лет назад|50 лет назад|в прошлом веке"; $locale['periods_time'] = "120|300|600|1200|1800|3600|7200|14400|43200|86400|172800|259200|345600|432000|518400|604800|1209600|1814400|2592000|5270400|7862400|15768000|31536000|63072000|94608000|126144000|157680000|189216000|220752000|252288000|283824000|315360000|473040000|630720000|1576800000|3153600000|";
Добавлено за 0.031 секунд, используя GeSHi 1.0.8.10
settings_time.php
Создаем отображение выбора формата даты в админ-панели
ищем
GeSHi: PHP $timestamp = time()+($settings2['timeoffset']*3600); $date_opts = "<option value=''>".$locale['455']."</option>\n"; foreach($locale['dateformats'] as $dateformat) { $date_opts .= "<option value='".$dateformat."'>".strftime($dateformat, $timestamp)."</option>\n"; }
Добавлено за 0.019 секунд, используя GeSHi 1.0.8.10
меняем strftime на showdate, получаем
GeSHi: PHP $timestamp = time()+($settings2['timeoffset']*3600); $date_opts = "<option value=''>".$locale['455']."</option>\n"; foreach($locale['dateformats'] as $dateformat) { $date_opts .= "<option value='".$dateformat."'>".showdate($dateformat, $timestamp)."</option>\n"; }
Добавлено за 0.021 секунд, используя GeSHi 1.0.8.10
maincore.php
Формируем вывод даты.
Меняем полностью функцию showdate
GeSHi: PHP // Format the date & time accordingly function showdate($format, $val) { global $settings, $userdata, $locale; if (isset($userdata['user_offset'])) { $offset = $userdata['user_offset']+$settings['serveroffset']; } else { $offset = $settings['timeoffset']+$settings['serveroffset']; } $val = $val + ($offset * 3600); if ($format == "shortdate" || $format == "longdate" || $format == "forumdate" || $format == "newsdate") { $format = $settings[$format];} if ($format != "period") { $months_long = explode("|", $locale['months']); $months_short = explode("|", $locale['shortmonths']); } else { $period_name = explode("|", $locale['periods_name']); $period_time = explode("|", $locale['periods_time']); foreach ($period_time as $period_num => $period_value) { if ($period_value >= $period) { $period_text=$period_name[$period_num]; break;} } return $period_text; } }
Добавлено за 0.024 секунд, используя GeSHi 1.0.8.10
Дополнительно
Если вы хотите видеть и использовать даты в виде "в прошлом веке" (ранее даты Unix) в каком-нибудь "Календаре событий", вы должны в полях с датой в БД включить отрицательные значения (Убрать по умолчанию установленный атрибут UNSIGNED)
к Примеру news_datestamp:
GeSHi: MySQL
Добавлено за 0.005 секунд, используя GeSHi 1.0.8.10
|