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

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


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

Все, наверное, знают что такое автоматическая склейка постов.

Это когда я написал пост, и где-нить через полминуты добавил еще один пост. Как результат - один склеенный пост (если, конечно, никто не написал следом за моим первым постом).

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

 

И так, мое решение для форумов IPB 2.1.x, кому интересно, конечно.

Выглядит оно так:

http://pixmixer.com/uploads/images/20060131/full_size/46929_Untitled-2.jpg

 

cache/lang_cache/*/lang_post.php (для всех языков сделать надо бы)

 

1ый вариант:

ищем:

$lang = array (

, добавляем ниже

'added_later'		 => "Добавлено позже",

 

2ой вариант (если строка из первого не находится):

ищем:

<?

, добавляем ниже

$lang['added_later'] = "Добавлено позже";

 

sources/classes/post/class_post_reply.php

 

ищем:

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

, заменяем на:

$new_post  = $last_post['post'].'<br /><br /><b>'.$this->ipsclass->lang['added_later'].' ('.$this->ipsclass->get_date( time(), 'SHORT', 1 ).'):</b><br />'.$this->post['post'];

 

ищем:

					$this->ipsclass->DB->do_update( 'posts', array( 'post' => $new_post, 'post_date' => time() ), 'pid='.$last_post['pid'] );

, и, чтобы дата оригинального поста не менялась, заменяем на:

					$this->ipsclass->DB->do_update( 'posts', array( 'post' => $new_post), 'pid='.$last_post['pid'] );

 

ну вот, в общем-то и всё.

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

  • Ответы 52
  • Создана
  • Последний ответ

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

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

  • Song

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

  • AEC

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

  • xRay

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

  • foolly

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

да, вот написал я штуку сюда, а протестировать на редактирование не догадался =)

<hr /> не парсится обратно.

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

ушел редактировать первый пост =)

 

кто успел сделать всё до даты этого поста, тому надо сделать:

sources/classes/post/class_post_reply.php

искать:

$new_post  = $last_post['post'].'<br /><br /><b>'.$this->ipsclass->lang['added_later'].' ('.$this->ipsclass->get_date( time(), 'SHORT', 1 ).'):</b><br /><hr />'.$this->post['post'];

и заменить на

$new_post  = $last_post['post'].'<br /><br /><b>'.$this->ipsclass->lang['added_later'].' ('.$this->ipsclass->get_date( time(), 'SHORT', 1 ).'):</b><br />'.$this->post['post'];

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

  • 2 недели спустя...
  • 3 месяца спустя...
можно ли как-нибудь редактировать цвет и размер этой фразы, причём при редактировании сообщения она бы оставалась неизменной?
Ссылка на комментарий
Поделиться на других сайтах

  • 3 месяца спустя...
  • 2 месяца спустя...
Если вам надо то выложу функцию для определения разницы во времени т.е.с колько прошло и в итоге получаем на выходе разницу которая выглядит так "Добавлено через 7 часов 51 минут 10 секунд (тут время поста)"

Отображение времени склейки

 

Вот моя функция для этого:

 

	//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 (strlen($h)==1) $diff = $diff . "$h часа ";
				else $diff = $diff . "$h часов "; 
			} if ( !$m == "0" ) { 
					if (($m=="2") or ($m=="3") or ($m=="4"))  
		{
				   			$diff = $diff . "$m минуты ";	
					}
					else
					{
							if ($m=="1") $diff = $diff . "$m минуту ";
							else $diff = $diff . "$m минут ";
					}
			} if ( !$s == "0" ) { 
					if (($s=="2") or ($s=="3") or ($s=="4"))  
		{
				   			$diff = $diff . "$s секунды ";	
					}
					else
					{
							if ($s=="1") $diff = $diff . "$s секунду ";
							else $diff = $diff . "$s секунд ";
					}
			} if ( $diff == "" ) { 
				$diff = "-"; 
			} 
			trim ($diff); 
			return $diff;
}

 

Использовать так:

// calculate timestap diff
$dta["lastpost"]=$this->topic['last_post'];
$dta['nu']=time();
$dif1 = trim($this->dateDiffEx($dta));

 

Ну втыкаем ее

 

Было в коде .silent так

$new_post = $last_post['post'].'<br /><br /><b>'.$this->ipsclass->lang['added_later'].' ('.$this->ipsclass->get_date( time(), 'SHORT', 1 ).'):</b><br />'.$this->post['post'];

 

дописываем вывод timestap diff

в результате это

$new_post = $last_post['post'].'<br /><br /><b>'.$this->ipsclass->lang['added_later'].' '.$dif1.' ('.$this->ipsclass->get_date( time(), 'SHORT', 1 ).'):</b><br />'.$this->post['post'];

то что вставить надо зеленым цветом выделено

 

Функция пашет давно и исправно, может чудок окончания подрихтовать только надо

 

Удачи!

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

Song

Вот так (пашет только если не было уже склеек к своему же посту) код из 2.0.х:

 

$str1 = $last_post['post'];
$str2 = $this->post['post'];
$flood_str_cmp = str_replace ($str1,"",$str2);

if (strlen($flood_str_cmp)==0)
{
$this->$flood_post = 1;
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'dont_flood_equal_msg', 'EXTRA' => '') );
}
else
$DB->do_update( 'posts', array( 'post' => $new_post, 'post_date' => time() ), 'pid='.$last_post['pid'] );

 

Ну и в ерор_ланг пихаем месагу о том что это дубль в dont_flood_equal_msg

 

Блин писал этот код давно сейчас не догоняю почему это гад вообще срабатывает :D

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

Ну как и я говорил, ошибка у тебя алгоритмическая.

Вот смотри:

 

Первый пост: "тест"

Второй пост: "тест1"

Получилось (например): "тест Добавлено тест1"

 

Теперь ты опять пишешь "тест1" и ожидаешь, что оно у тебя атлупится по сравнению двух постов. Такого не будет т.к.

"тест Добавлено тест1" != "тест1"

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

Я же написал работает если не было до этого склейки.

 

Ты у себя это делал? Если да, то как разрулил вместе со склейкой?

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

Ты у себя это делал?

да, я ж не зря внимание акцентировал.

Ты у себя это делал?

регулярным выражением вырезаю только последний ответ после "Добавлено" и сравниваю уже его.

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

  • 1 месяц спустя...
  • 2 месяца спустя...

Странно он как-то работает... склейка сообщений происходит всегда или то. что задано в админке?

Допустим если человек написал сообщение вчера.. и сегодня опять пишет в эту тему... то сообщения не склеиваются...

 

Т.е. вот эта функция в админке влияет?

Обьединять сообщения

Укажите время в течении которого будут обьединены сообщения участника отправленные один после другого.

0 - отмена возможности.

 

 

И можно как-нить объеденить этот мод и ЭТОТ? А то приходится выбирать что-то одно (((

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

Все, наверное, знают что такое автоматическая склейка постов.

Это когда я написал пост, и где-нить через полминуты добавил еще один пост. Как результат - один склеенный пост (если, конечно, никто не написал следом за моим первым постом).

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

 

И так, мое решение для форумов IPB 2.1.x, кому интересно, конечно.

Выглядит оно так:

http://pixmixer.com/uploads/images/20060131/full_size/46929_Untitled-2.jpg

 

cache/lang_cache/*/lang_post.php (для всех языков сделать надо бы)

 

1ый вариант:

ищем:

$lang = array (

, добавляем ниже

'added_later'		 => "Добавлено позже",

 

2ой вариант (если строка из первого не находится):

ищем:

<?

, добавляем ниже

$lang['added_later'] = "Добавлено позже";

 

sources/classes/post/class_post_reply.php

 

ищем:

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

, заменяем на:

$new_post  = $last_post['post'].'<br /><br /><b>'.$this->ipsclass->lang['added_later'].' ('.$this->ipsclass->get_date( time(), 'SHORT', 1 ).'):</b><br />'.$this->post['post'];

 

ищем:

					$this->ipsclass->DB->do_update( 'posts', array( 'post' => $new_post, 'post_date' => time() ), 'pid='.$last_post['pid'] );

, и, чтобы дата оригинального поста не менялась, заменяем на:

					$this->ipsclass->DB->do_update( 'posts', array( 'post' => $new_post), 'pid='.$last_post['pid'] );

 

ну вот, в общем-то и всё.

пробывал на 2.2.2 - не пашет

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

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

А можно про функцию поподробнее? Куда её вставлять-то?

 

И еще вопрос: как сделать так, чтобы добавленное сообщение распознавалось форумом как новое?

 

То бишь, чтобы в списке новых сообщений выводилось?

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

А можно про функцию поподробнее? Куда её вставлять-то?

 

И еще вопрос: как сделать так, чтобы добавленное сообщение распознавалось форумом как новое?

 

То бишь, чтобы в списке новых сообщений выводилось?

оно так и работает...

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

А можно про функцию поподробнее? Куда её вставлять-то?

 

И еще вопрос: как сделать так, чтобы добавленное сообщение распознавалось форумом как новое?

 

То бишь, чтобы в списке новых сообщений выводилось?

оно так и работает...

 

Эм. У меня нет... Я ставил версию мода из первого поста, то бишь из файлового архива. :D;)

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

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

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

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

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

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

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

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

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

Зарузка...

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

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

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