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

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


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

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

		//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;) вы следите за своей мыслью? именно об этом я и пытаюсь здесь сказать.

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

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

 

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

дата поста

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

 

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

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

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

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

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

Зарузка...

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

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

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