Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[RC1] Posted After

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет
Контактная информация:

[RC1] Posted After

Сообщение quazi »

этот мод показывает в каждом сообщении временной интервал между текущим и предыдущим постами
настоящее время время поста все также указывается во всплывающих подсказках

требуется наличие файла DeltaRussian.php, который можно скачать с http://forum.dklab.ru/viewtopic.php?p=35068#35068

описалово мода

Код: Выделить всё

#
#----[ COPY ]----
#
copy DeltaRussian.php to includes/Date/DeltaRussian.php


#
#----[ OPEN ]----
#
viewtopic.php


#
#----[ FIND ]----
#
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
//


#
#----[ BEFORE, ADD ]----
#
// +Posted After
include_once $phpbb_root_path . 'includes/Date/DeltaRussian.php';
$date_delta =& new Date_DeltaRussian();
$date_delta->setIntervals($lang['datetime']['intervals']);
// -Posted After


#
#----[ FIND ]----
#
        $poster = ( $poster_id == ANONYMOUS ) ? $lang['Guest'] : $postrow[$i]['username'];


#
#----[ AFTER, ADD ]----
#
        // +Posted After
        $post_date_after = $post_date = create_date($board_config['default_dateformat'], $postrow[$i]['post_time'], $board_config['board_timezone']);
        if ($i)
        {
                $post_date_after = sprintf(@$lang['datetime']['after'], $date_delta->spellDelta($postrow[$i - 1]['post_time'], $postrow[$i]['post_time']));
        }
        // -Poster After


#
#----[ FIND ]----
#
                'POST_DATE' => $post_date,


#
#----[ BEFORE, ADD ]----
#
                // +Posted After
                'POST_DATE_AFTER' => $post_date_after,
                // -Posted After

#
#----[ OPEN ]----
#
language/lang_english/lang_main.php


#
#----[ FIND ]----
#
$lang['datetime']['Dec'] = 'Dec';


#
#----[ AFTER, ADD ]----
#
// +Posted After
$lang['datetime']['after'] = '% ago';
$lang['datetime']['intervals'] = array(
        'seconds' => array('second', 'seconds'),
        'minutes' => array('minute', 'minutes'),
        'hours'   => array('hour', 'hours'),
        'mday'    => array('day', 'days'),
        'mon'     => array('month', 'months'),
        'years'   => array('year', 'years'),
);
// -Posted After


#
#----[ OPEN ]----
#
language/lang_russian/lang_main.php


#
#----[ FIND ]----
#
$lang['datetime']['Dec'] = 'Дек';


#
#----[ AFTER, ADD ]----
#
// +Posted After
$lang['datetime']['after'] = 'Спустя %s';
$lang['datetime']['intervals'] = array(
        'seconds' => array('секунду', 'секунды', 'секунд'),
        'minutes' => array('минуту', 'минуты', 'минут'),
        'hours'   => array('час', 'часа', 'часов'),
        'mday'    => array('день', 'дня', 'дней'),
        'mon'     => array('месяц', 'месяца', 'месяца'),
        'years'   => array('год', 'года', 'лет'),
);
// -Posted After


#
#----[ OPEN ]----
#
templates/subSilver/viewtopic_body.tpl

#
#----[ FIND ]----
#
{postrow.POST_DATE}


#
#----[ REPLACE WITH ]----
#
<span title="{postrow.POST_DATE}">{postrow.POST_DATE_AFTER}</span>

#
#----[ SAVE/CLOSE ALL FILES ]----
#


#
# EoM
#
измененный файл DeltaRussian.php
все оригинальные строки закомментированы и сохранены

Код: Выделить всё

<?php

// Original of this file had been downloaded from
// http://forum.dklab.ru/viewtopic.php?p=35068#35068

class Date_DeltaRussian 
{

	// +Posted After
	var $intervals = array(
		'seconds' => array('second', 'seconds'),
		'minutes' => array('minute', 'minutes'),
		'hours'   => array('hour', 'hours'),
		'mday'    => array('day', 'days'),
		'mon'     => array('month', 'months'),
		'years'   => array('year', 'years'),
	);

	/*
	var $intervals = array(
		"seconds"  => array("секунду", "секунды", "секунд"),
		"minutes"  => array("минуту", "минуты", "минут"),
		"hours"    => array("час", "часа", "часов"),
		"mday"     => array("день", "дня", "дней"),
		"mon"      => array("месяц", "месяца", "месяцев"),
		"year"     => array("год", "года", "лет")
	);
	*/
	// -Posted After

	var $from = "seconds";

	// Creates new object.
	// If $from is specified, "granularity" while spelling is $from.
	function Date_DeltaRussian($from = "seconds") 
	{
		$this->from = $from;
	}

	// +Posted After
	// Sets language dependent time intervals
	// Sets single, dualis and pluralis 
	function setIntervals($intervals)
	{
		foreach ($this->intervals as $k => $v)
		{
			if ( isset($intervals[$k]) && is_array($intervals[$k]) )
			{
				$this->intervals[$k] = $intervals[$k];
				while ( count($this->intervals[$k]) < 3 )
				{
					array_push($this->intervals[$k], end($this->intervals[$k]));
				}
			}
		}
	}
	// -Posted After

	// returns the associative array with date deltas.
	function getDelta($first, $last)
	{
		if ($last < $first) return false;

		// Solve H:M:S part.
		$hms = ($last - $first) % (3600 * 24);
		$delta['seconds'] = $hms % 60;
		$delta['minutes'] = floor($hms/60) % 60;
		$delta['hours']   = floor($hms/3600) % 60;

		// Now work only with date, delta time = 0.
		$last -= $hms;
		$f = getdate($first);
		$l = getdate($last); // the same daytime as $first!

		$dYear = $dMon = $dDay = 0;

		// Delta day. Is negative, month overlapping.
		$dDay += $l['mday'] - $f['mday'];
		if ($dDay < 0) {
			$monlen = Date_DeltaRussian::monthLength(date("Y", $first), date("m", $first));
			$dDay += $monlen;
			$dMon--;
		}
		$delta['mday'] = $dDay;

		// Delta month. If negative, year overlapping.
		$dMon += $l['mon'] - $f['mon'];
		if ($dMon < 0) {
			$dMon += 12;
			$dYear --;
		}
		$delta['mon'] = $dMon;

		// Delta year.
		$dYear += $l['year'] - $f['year'];
		$delta['year'] = $dYear;
		
		return $delta;
	}

	// Makes the spellable phrase.
	function spellDelta($first, $last)
	{
		// Solve data delta.
		$delta = $this->getDelta($first, $last);
		if (!$delta) return false;

		// Make spellable phrase.
		$parts = array();
		foreach (array_reverse($delta) as $k=>$n) {
			if (!$n) continue;
			$parts[] = Date_DeltaRussian::declension($n, $this->intervals[$k]);
			if ($this->from && $k == $this->from) break;
		}
		return join(" ", $parts);
	}

	// Returns the length (in days) of the specified month.
	function monthLength($year, $mon)
	{
		$l = 28;
		while (checkdate($mon, $l+1, $year)) $l++;
		return $l;
	}

	// +Posted After
	function declension($int, $expr) 
	{ 
		if (!is_array($expr)) {
			return $expr;
		}
		while (count($expr) < 3) {
			array_push($expr, end($expr));
		}

		$int = (int)$int;

		$count = $int % 100;
		if ($count >= 5 && $count <= 20) {
			$return = end($expr);
		} else {
			$count %= 10;
			if ($count == 1) {
				$return = reset($expr);
			} elseif ($count && $count < 5) {
				reset($expr);
				$return = next($expr);
			} else {
				$return = end($expr);
			}
		}
		return $int . ' ' . $return;
	}

	/*
	// Функция предназначена для вывода численных результатов с учетом 
	// склонения слов, например: "1 ответ", "2 ответа", "13 ответов" и т.д. 
	// $int - целое число. 
	// $expressions - массив, например: array("ответ", "ответа", "ответов") 
	function declension($int, $expressions)
	{
	   settype($int, "integer"); 
	   $count = $int % 100; 
	   if ($count >= 5 && $count <= 20) { 
		  $result = $int." ".$expressions['2']; 
	   } else { 
		  $count = $count % 10; 
		  if ($count == 1) { 
			 $result = $int." ".$expressions['0']; 
		  } elseif ($count >= 2 && $count <= 4) { 
			 $result = $int." ".$expressions['1']; 
		  } else { 
			 $result = $int." ".$expressions['2']; 
		  } 
	   } 
	   return $result; 
	} 
	*/
	// -Posted After

}

?>
Последний раз редактировалось quazi 02.02.2006 21:30, всего редактировалось 1 раз.
Аватара пользователя
LD.
phpBB 1.4.4
Сообщения: 100
Стаж: 18 лет 2 месяца
Откуда: BEERюлево-ZAPADное
Контактная информация:

Сообщение LD. »

А смысл этого мода? Видеть, через сколько было написано сообщение после последнего??? Не вижу смысла в этом...
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет
Контактная информация:

Сообщение quazi »

LD. писал(а):А смысл
за смыслом ходить на форумы http://forum.dklab.ru/ и http://xpoint.ru/

если люди такое делают, значит это востребовано

на офф.сайте опубликованы менее лаконичные и более дырявые модификации
Аватара пользователя
baldahin
phpBB 1.4.3
Сообщения: 97
Стаж: 19 лет 2 месяца

Сообщение baldahin »

quazi, спасибо за мод.

поскольку я использую время от предудщего поста не ВМЕСТО даты поста, а РЯДОМ, то мне хотелось бы видеть в моде следующие моменты:
1. Если пост первый в теме, то $POST_DATE_AFTER должна быть пустой :)
2. Хорошо бы придумать как округлять длинные даты, например Спустя 1 месяц 10 дней 16 часов 59 минут 50 секунд читалось бы гораздо лучше, если бы было просто Спустя 1 месяц 10 дней, т.е. имхо следует обрезать секунды, если есть часы; обрезать минуты и секунды, если есть дни; и обрезать часы, минуты и секунды, если есть месяцы.
~ & § OM § & ~
phpBB 1.4.4
Сообщения: 141
Стаж: 17 лет 8 месяцев
Контактная информация:

Сообщение ~ & § OM § & ~ »

quazi
огромное спасибо, очень грамматно написано.
Вниманию чертей!
Прежде чем задать очередной идиотский вопрос - прочитай сначала правила, потом общие ошибки новичков, Руководство пользователя и частозадаваемые вопросы, после чего, если желание задавать вопрос еще не пропало - на основании шаблона запроса можно задать вопрос в соответствующем разделе конференции.
Необходимо помнить, что поддержка оказывается только для последней версии и только на конференции.
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет
Контактная информация:

Сообщение quazi »

baldahin
1. это так и есть
2. можно было бы, просто надо определить критерий как делать округление (огрубление точности)

baldahin
~ & § OM § & ~
всем пожалуйста
Lektor
phpBB 2.0.7
Сообщения: 574
Стаж: 17 лет 11 месяцев

Сообщение Lektor »

Мод поставил бы с удовльствием .
Тока вот "1. Если пост первый в теме, то $POST_DATE_AFTER должна быть пустой " -- актуально..

Я хочу чтоб было так: <a href=....>Отправлено: дата</a> | Спустя: часов минут

Код: Выделить всё

<a href="{postrow.U_MINI_POST}"><img src="{postrow.MINI_POST_IMG}" width="12" height="9" alt="{postrow.L_MINI_POST_ALT}" title="{postrow.L_MINI_POST_ALT}" border="0" /><span class="post-details">{L_POSTED}: {postrow.POST_DATE}</span></a>&nbsp;|&nbsp;<span title="{postrow.POST_DATE}">{postrow.POST_DATE_AFTER}</span>
Добавлено спустя 26 секунд:

И все таки секунды лучше округлиь бы ..
Lektor
phpBB 2.0.7
Сообщения: 574
Стаж: 17 лет 11 месяцев

Сообщение Lektor »

Все таки подскажите как же сделать..
Хочу что было так:
Если первый пост, то:
Отправлено: 26 Фев 2007 3:01 pm

А если нет, то:
Отправлено: 27 Фев 2007 02:30 pm (спустя 10 минут)

А у меня получается либо:
Если первый пост, то:
Отправлено: 26 Фев 2007 3:01 pm

Если нет, то:
Отправлено: (спустя 10 минут)
либо:
Если первый пост, то:
Отправлено: 26 Фев 2007 3:01 pm 26 Фев 2007 3:01 pm

А если нет, то:
Отправлено: 27 Фев 2007 02:30 pm (спустя 10 минут)
Закрыто

Вернуться в «Бета-версии модов для phpBB 2.0.x»