Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: [РЕШЕНО] Перевод плагина Date (Typo) - Time Ago

[РЕШЕНО] Перевод плагина Date (Typo) - Time Ago 10 мес. 3 нед. назад #11753

  • Dgikar
  • Dgikar аватар
  • Не в сети
  • Модератор
  • Сообщений: 230
  • Спасибо получено: 21
  • Репутация: 5
Решил я воспользоваться Typo для вывода даты публикации статьи. В настройках указал следующее:

Это изображения скрыто для гостей.
Пожалуйста, зарегистрируйтесь или войдите, чтобы увидеть его.

но как оказалось, языковых файлов, отвечающих за вывод на морде сайта только 2-а:
  1. en-GB.com_cck_default.ini
  2. fr-FR.com_cck_default.ini
поэтому я, в ru-RU.override.ini (для сайта) перенс языковые переменные из английского файла и перевел их. Благо там не очень много:
    COM_CCK_YEARS="Лет"
    COM_CCK_YEAR="Год"
    COM_CCK_MONTHS="Месяцев"
    COM_CCK_MONTH="Месяц"
    COM_CCK_DAY="День"
    COM_CCK_DAYS="дней"
    COM_CCK_YESTERDAY="Вчера"
    COM_CCK_TODAY="Сегодня"
    COM_CCK_MINUTE="минута"
    COM_CCK_MINUTES="минут(ы)"
    COM_CCK_JUST_NOW="Прямо сейчас"
    COM_CCK_HOUR="час"
    COM_CCK_HOURS="часа"
    COM_CCK_TIMELEFT_SENTENCE="%s назад"
    COM_CCK_DATES="Даты"
    COM_CCK_DATE="Дата"
При перезагрузке страницы, получил вот такое:

Это изображения скрыто для гостей.
Пожалуйста, зарегистрируйтесь или войдите, чтобы увидеть его.

Забегая на перед, скажу что у меня все в кодировке UTF8 (база, языковый файл (UTF8 без BOM) да и сам сайт)...
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Поговорив с Klas на оф. форуме, я получил совет сделать следующее:
    добавить в
plugins/cck_field_typo/date/date.php
вот эту строку (перед классом плагина):
use Joomla\String\StringHelper
и заменить все
strtolower
на
StringHelper::strtolower
И... Сработало! Дата стала отображаться верно и без крякозябликоФ!

Это изображения скрыто для гостей.
Пожалуйста, зарегистрируйтесь или войдите, чтобы увидеть его.

P. S.
    понимаю что костыль, т. к. эти исправления слетят при следующем обновлении...
Поэтому, в ближайшее время, я сделаю на гитабе реквест о внесении этих изменений в следующем релизе...
Оказывается эта тема уже есть на Гитхабе с 03.10.2016...
Я добавил вопрос об отображении минуТ, минуТА, минуТЫ и чаС, чаСА, чаСОВ
Долог путь поучения, краток и успешен путь примеров (Сенека).
Последнее редактирование: 10 мес. 3 нед. назад от Dgikar.
Администратор запретил публиковать записи гостям.
Спасибо сказали: Vasja

[РЕШЕНО] Перевод плагина Date (Typo) - Time Ago 10 мес. 3 нед. назад #11754

  • Vasja
  • Vasja аватар
  • Не в сети
  • Давно я тут
  • Сообщений: 108
  • Спасибо получено: 1
  • Репутация: 1
Примерно неделю назад тоже столкнулся с этой проблемой. Спасибо за решение, пусть даже и костыльное :)
Администратор запретил публиковать записи гостям.

[РЕШЕНО] Перевод плагина Date (Typo) - Time Ago 10 мес. 2 нед. назад #11764

  • Dgikar
  • Dgikar аватар
  • Не в сети
  • Модератор
  • Сообщений: 230
  • Спасибо получено: 21
  • Репутация: 5
Т. к. разработчики SEBLOD тянут с решением проблем с Typo плагином Date, я задался целью сделать отображение даты публикации в формате (как пример):
  • 27 минут назад;
  • сегодня, в 17:29
  • вчера, в 14:37
Правда не в каком-либо шаблоне SEBLOD, а в простом com_content (но это можно реализовать и в кастомном шаблоне так же!).

Для этого, в переопределенном файле (равно как и в любом другом где нужно вывести дату публикации)
templates/my_template/html/layouts/joomla/content/info_block/publish_date.php
я прописал вот такой код вызова функции:
require_once JPATH_THEMES . '/my_teplate/helper.php'; // подключаю файл с функцией
 
<span uk-icon="icon: calendar"></span>
<time datetime="<?php echo JHtml::_('date', $art_publish_date, 'c'); ?>" itemprop="datePublished">
	<?php echo publish_date ($art_publish_date); ?>
</time>
В корне своего шаблона. я создал файл:
templates/my_template/helper.php
В котором прописал вот эту функцию:
function publish_date($timestamp) {
		$current_time = time();
		$publish_time = strtotime($timestamp);
		$time_diff = $current_time - $publish_time;
 
		$seconds = $time_diff;
		$minutes = round($seconds / 60); // 60 секунд. Минуты в UNIX формате даты
		$days = JHtml::_('date', $current_time, 'd') - JHtml::_('date', $publish_time, 'd');
 
		$minutes_interval = $minutes >= 2 && $minutes <= 4 || $minutes >= 22 && $minutes <= 24 || $minutes >= 32 && $minutes <= 34 || $minutes >= 42 && $minutes <= 44 || $minutes >= 52 && $minutes <= 54;
		$minut_interval   = $minutes == 0 || $minutes >= 5 && $minutes <= 20 || $minutes >= 25 && $minutes <= 30 || $minutes >= 35 && $minutes <= 40 || $minutes >= 45 && $minutes <= 50 || $minutes >= 55 && $minutes <= 60;
		$minuta_interval  = $minutes == 1 | $minutes == 21 || $minutes == 31 || $minutes == 41 || $minutes == 51;
 
		if ($seconds <= 60) {
			return "<span>" . JText::_('COM_CCK_JUST_NOW') . "</span>";
		} else if ($minutes <= 59) {
			if ($minutes == 1) {
				return "<span>" . JText::_('COM_CCK_JUST_NOW') . "</span>";
			} else if ($minutes_interval) {
				return "<span>" . $minutes . " " . JText::_('COM_CCK_MINUTES') . " " . JText::_('COM_CCK_AGO') . "</span>";
			} else if ($minut_interval) {
				return "<span>" . $minutes . " " . JText::_('COM_CCK_MINUT') . " " . JText::_('COM_CCK_AGO') . "</span>";
			} else if ($minuta_interval) {
				return "<span>" . $minutes . " " . JText::_('COM_CCK_MINUTE') . " " . JText::_('COM_CCK_AGO') . "</span>";
			}
		} else if ($days == 0) {
			return "<span>" . JText::_('COM_CCK_TODAY_AT') . " " . JHtml::_('date', $timestamp, JText::_('DATE_FORMAT_LC12')) . "</span>";
		}else if ($days == 1) {
			return "<span>" . JText::_('COM_CCK_YESTERDAY_IN') . " " . JHtml::_('date', $timestamp, JText::_('DATE_FORMAT_LC12')) . "</span>";
		} else {
			return "<span>" . JHtml::_('date', $timestamp, JText::_('DATE_FORMAT_LC2')) . "</span>";
		}
	}
Добавил несколько языковых переменных в
my_site\language\overrides\ru-RU.override.ini
DATE_FORMAT_LC12="H:i"
COM_CCK_JUST_NOW="опубликовано только что"
COM_CCK_MINUT="минут"
COM_CCK_MINUTE="минута"
COM_CCK_MINUTES="минуты"
COM_CCK_AGO="назад"

В итоге:
  • если статья была опубликована менее 59-ти минут, то отображается (например): 31 минутА назад или 50 минуТ назад...
  • если статья была опубликована более 60-ти минут, то отображается (например): сегодня. в 01:25...
  • если статья была опубликована более суток назад, то отображается: вчера, в 15:27...

P. S.
    Да! Я понимаю что это не самое элегантное решение, и этот код можно смело назвать говнокодом...
    Поэтому, буду благодарен, если кто-то поможет мне сделать этот код более элегантным!
Долог путь поучения, краток и успешен путь примеров (Сенека).
Последнее редактирование: 10 мес. 2 нед. назад от Dgikar.
Администратор запретил публиковать записи гостям.
Спасибо сказали: KrukI
Модераторы: KKAAZZOO

roundtheme