Перейти к контенту

Хак автоматической склейки постов одного автора, идущих друг за другом


Рекомендуемые сообщения

модифицировал этот код:

		//calculate timestamp diff
	function dateDiffEx($row)
{
			$s = $row["nu"] - $row["lastpost"];
			$m = intval($s/60);
			$s = $s % 60;
			$h = intval($m/60);
			$m = $m % 60;
			$d = intval($h/24);
			$h = $h % 24;
			$diff = "добавлено через ";
			if ( !$d == "0" ) {
				$diff = $diff . "$d день ";
			} if ( !$h == "0" ) {
				if ($h=="1") $diff = $diff . "$h час ";
				else
				{
				if (($h=="2") or ($h=="3") or ($h=="4") or ($h=="22") or ($h=="23"))
								$diff = $diff . "$h часа ";
				else $diff = $diff . "$h часов ";
				}
			} if ( !$m == "0" ) {
					if (($m=="2") or ($m=="3") or ($m=="4") or ($m=="22") or ($m=="23") or ($m=="24") or ($m=="32") or ($m=="33") or ($m=="34") or ($m=="42") or ($m=="43") or ($m=="44") or ($m=="52") or ($m=="53") or ($m=="54"))
		{
							   $diff = $diff . "$m минуты ";
					}
					else
					{
							if (($m=="1") or ($m=="21") or ($m=="31") or ($m=="41") or ($m=="51")) $diff = $diff . "$m минуту ";
							else $diff = $diff . "$m минут ";
					}
			} if ((!$s == "0") and ($m == "0")) {
					if (($s=="2") or ($s=="3") or ($s=="4") or ($s=="22") or ($s=="23") or ($s=="24") or ($s=="32") or ($s=="33") or ($s=="34") or ($s=="42") or ($s=="43") or ($s=="44") or ($s=="52") or ($s=="53") or ($s=="54"))
		{
							   $diff = $diff . "$s секунды ";
					}
					else
					{
							if (($s=="1") or ($s=="21") or ($s=="31") or ($s=="41") or ($s=="51")) $diff = $diff . "$s секунду ";
							else $diff = $diff . "$s секунд ";
					}
			} if ( $diff == "" ) {
				$diff = "-";
			}
			trim ($diff);
			return $diff;
}

 

$new_post = $last_post['post'].'<br /><br /><i>'.$dif1.':</i><br />'.$this->post['post'];

 

 

 

у вас в моде вроде как предусмотрено сохранение даты первого поста при склеивании. так вот в самом посте действительно пишет изначальную дату. а вот в списке топиков дата меняется и пост поднимается в самый верх списка, что не есть хорошо.

 

замените эту строчку в том же файле:

$update_array['last_post'] = time();

 

на этот код и проблема решена:

			if ( $this->topic['last_poster_id'] != $this->ipsclass->member['id'] )
		{
		$update_array['last_post']		= time();
		}
	else if ( $this->topic['last_post'] < $time_check )
			{
			$update_array['last_post']		= time();
			}

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...
  • Ответы 52
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

  • Song

    Song 10 публикаций

  • AEC

    AEC 7 публикаций

  • xRay

    xRay 5 публикаций

  • foolly

    foolly 4 публикации

  • 3 недели спустя...

Хак конечно клёвый, но хотелось чтобы в место

 

http://img294.imageshack.us/img294/9579/pic3fu6.jpg

 

было

 

Добавленно спустя %time%

 

ытить

Ссылка на комментарий
Поделиться на других сайтах

 

ty, немного переправил и получилось то, что хотел (;

Ссылка на комментарий
Поделиться на других сайтах

А чем тот вариант не устроил?

 

Послностью устроил, просто изменил цвет текста и получилось http://img264.imageshack.us/img264/8325/pic1wb1.jpg, как я и хотел :D

Ссылка на комментарий
Поделиться на других сайтах

А чем тот вариант не устроил?

 

Послностью устроил, просто изменил цвет текста и получилось http://img264.imageshack.us/img264/8325/pic1wb1.jpg, как я и хотел :D

А как так сделать нашпиши пожалуйста.

 

Уже разобрался

 

На 2.2.х работает всё

Ссылка на комментарий
Поделиться на других сайтах

/sources/classes/post/class_post_reply.php

 

Найти

$new_post  = $last_post['post'].'<br /><br />'.$this->post['post'];

 

Заменить на

$timedeff = time() - $last_post['post_date'];

$timedeff = round($timedeff / 60);

$new_post = $last_post['post'].'<br /><br /><!--sizeo:1--><span style="color:red;font-size:8pt;line-height:100%"><!--/sizeo-->'.( ( $timedeff ) ? 'Добавлено через <b>'.$timedeff.'</b> мин.:' : 'Добавлено:').'<!--sizec--></span><!--/sizec--><br />'.$this->post['post'];

 

Текст склейки 2.1.х

Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...
модифицировал этот код:

		//calculate timestamp diff
	function dateDiffEx($row)
{
			$s = $row["nu"] - $row["lastpost"];
			$m = intval($s/60);
			$s = $s % 60;
			$h = intval($m/60);
			$m = $m % 60;
			$d = intval($h/24);
			$h = $h % 24;
			$diff = "добавлено через ";
			if ( !$d == "0" ) {
				$diff = $diff . "$d день ";
			} if ( !$h == "0" ) {
				if ($h=="1") $diff = $diff . "$h час ";
				else
				{
				if (($h=="2") or ($h=="3") or ($h=="4") or ($h=="22") or ($h=="23"))
								$diff = $diff . "$h часа ";
				else $diff = $diff . "$h часов ";
				}
			} if ( !$m == "0" ) {
					if (($m=="2") or ($m=="3") or ($m=="4") or ($m=="22") or ($m=="23") or ($m=="24") or ($m=="32") or ($m=="33") or ($m=="34") or ($m=="42") or ($m=="43") or ($m=="44") or ($m=="52") or ($m=="53") or ($m=="54"))
		{
							   $diff = $diff . "$m минуты ";
					}
					else
					{
							if (($m=="1") or ($m=="21") or ($m=="31") or ($m=="41") or ($m=="51")) $diff = $diff . "$m минуту ";
							else $diff = $diff . "$m минут ";
					}
			} if ((!$s == "0") and ($m == "0")) {
					if (($s=="2") or ($s=="3") or ($s=="4") or ($s=="22") or ($s=="23") or ($s=="24") or ($s=="32") or ($s=="33") or ($s=="34") or ($s=="42") or ($s=="43") or ($s=="44") or ($s=="52") or ($s=="53") or ($s=="54"))
		{
							   $diff = $diff . "$s секунды ";
					}
					else
					{
							if (($s=="1") or ($s=="21") or ($s=="31") or ($s=="41") or ($s=="51")) $diff = $diff . "$s секунду ";
							else $diff = $diff . "$s секунд ";
					}
			} if ( $diff == "" ) {
				$diff = "-";
			}
			trim ($diff);
			return $diff;
}

 

$new_post = $last_post['post'].'<br /><br /><i>'.$dif1.':</i><br />'.$this->post['post'];

 

 

 

у вас в моде вроде как предусмотрено сохранение даты первого поста при склеивании. так вот в самом посте действительно пишет изначальную дату. а вот в списке топиков дата меняется и пост поднимается в самый верх списка, что не есть хорошо.

 

замените эту строчку в том же файле:

$update_array['last_post'] = time();

 

на этот код и проблема решена:

			if ( $this->topic['last_poster_id'] != $this->ipsclass->member['id'] )
		{
		$update_array['last_post']		= time();
		}
	else if ( $this->topic['last_post'] < $time_check )
			{
			$update_array['last_post']		= time();
			}

а можно по подробней в каких файлах изменения то делать :D

Ссылка на комментарий
Поделиться на других сайтах

а можно по подробней в каких файлах изменения то делать :D
sources/classes/post/class_post_reply.php

а что на что заменять самому гадать ? =)

Ссылка на комментарий
Поделиться на других сайтах

модифицировал этот код:

я для чего привёл ссылку на исходный код? если на него взглянуть, то сразу становится всё понятно.

Ссылка на комментарий
Поделиться на других сайтах

  • 4 недели спустя...

кстати, проблема с датами до конца так и не решена!

 

при склеивании сообщений на главной странице отображается дата, когда было добавлено (приклеено) новое сообщение. а во всех остальных местах (в списке тем, в самом сообщении) отображается дата первого сообщения, к которому липнут все остальные. сам я найти код, который отвечает за дату последнего сообщения на главной так и не нашёл. если кто в курсе, дайте знать, чтобы довести мод до логического конца.

Ссылка на комментарий
Поделиться на других сайтах

  • 4 недели спустя...
На 2.3.3 проверено. Все отлично работает. Плюсую пост последнего автора. С датами нужно разобраться. Доселе сидел на phpBB, знаю его досконально, а вот за IPB толmrj второй вечер. Решил для саморазвития рассмотреть... темный лес. Код куда посложнее будет...
Ссылка на комментарий
Поделиться на других сайтах

кстати, проблема с датами до конца так и не решена!

 

при склеивании сообщений на главной странице отображается дата, когда было добавлено (приклеено) новое сообщение. а во всех остальных местах (в списке тем, в самом сообщении) отображается дата первого сообщения, к которому липнут все остальные. сам я найти код, который отвечает за дату последнего сообщения на главной так и не нашёл. если кто в курсе, дайте знать, чтобы довести мод до логического конца.

Ну правильно. На главной странице публикуется дата обновления топика.

А во всех остальных - дата написания поста.

Ссылка на комментарий
Поделиться на других сайтах

Ну правильно. На главной странице публикуется дата обновления топика. А во всех остальных - дата написания поста.

так а что правильного-то? должно быть одинаково. либо так, либо этак.

логичнее при склеивании конечно же не обновлять дату поста. и если уже не обновлять, то во всех случаях.

Ссылка на комментарий
Поделиться на других сайтах

А с какой стати её обновлять?

От того что к посту добавилась ещё одна часть, пост не стал быть написаным позже.

Ссылка на комментарий
Поделиться на других сайтах

От того что к посту добавилась ещё одна часть, пост не стал быть написаным позже.

:D;) вы следите за своей мыслью? именно об этом я и пытаюсь здесь сказать.

при склеивании сообщений на главной странице отображается дата, когда было добавлено (приклеено) новое сообщение.
Ссылка на комментарий
Поделиться на других сайтах

Моя фраза касается даты поста, а не даты на главной странице, ибо на главной странице указывается дата обновления топика (!). На главной странице вообще нет постов. Там есть только либо разделы, либо топики.

 

Подумайте над этими понятиями:

дата поста

дата обновления топика

 

это не одно и тоже.

Ссылка на комментарий
Поделиться на других сайтах

возможно вы и правы. просто это смущает не одного меня. модераторы мои тоже не могут понять в чём дело. на главной сигнализирует о обновлении даты топика, а когда в него заходят, то типа дата последнего сообщения не изменена.

вообще смысл данной функции в предотвращении "подъёма" топиков наверх. и на главной странице это как раз и не удаётся предотвратить.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.