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

Advanced Posts Merging

Все моды, созданные нашим сообществом для phpBB 2.0.x, анонсированы тут.
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 19 лет

Сообщение IGO »

1) Установил.
2) Ошибок не выдаёт.
3) При запуске файла advanced_posts_merging_db_ins.php

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

Advanced Posts Merging DB Update
Installation failed: Duplicate entry 'time_to_merge' for key 1
4) Как правильно нужно выставлять время в админке? :?

Добавлено спустя 6 минут 12 секунд:

Нет, а теперь вроде склеил...
Но вот с установкой времени, думаю стоит разобраться..
IGO писал(а):4) Как правильно нужно выставлять время в админке? Confused
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 19 лет
Откуда: Архангельск

Сообщение Гога »

По моему скромному мнению, надо добавить проверку размера предыдущего сообщения, и, если оно превосходит определённое значение, то не склеивать с ним, чтобы не получались монстрообразные посты.
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 2 месяца
Поблагодарили: 2 раза

Сообщение Xpert »

IGO
3. Все ок. Есть SQL в файле, а есть скрипт который добавляет поля и выполняет команды. Вы попытались воспользоваться и тем и тем.
4. Новые опции, которые создает мод в Конфигурации вроде прекрасно документированы... Время склейки - в часах, флуд-контроль склейки - в секундах.

Гога
Очень может быть. Но так неохота выделять под это отдельную настройку и поле в БД. Просто в коде да в виде addon - пожалуйста, тут банальный strlen().

Добавлено спустя 2 минуты 8 секунд:
IGO писал(а):А количество постов у пользователей измениться?
Никак. Остается прежним.
Гога писал(а):А как быть с ограничением числа вложений в одном сообщении?
Пока никак... не действует оно в случае с модом. А дальше посмотрим...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 19 лет
Откуда: Архангельск

Сообщение Гога »

Вот нашёл-таки ещё одного таракана :)

Как оно выглядит:
Есть сообщение от 21.08.2005 Вс, 00:35
в нему спустя 6 дней 12 часов 9 минут 20 секунд добавлено ещё.
В этом же форуме (в другой теме) есть сообщение от 21.08.2005 Вс, 15:58
Обращаю внимание: первое сообщение с добавкой новее второго.

Далее, 28.08.2005 создаётся ещё одно сообщение в этом форуме (в другой, уже третьей теме, которая и до этого существовала). Затем оно удаляется.

В итоге на главной странице в этом форуме показывается самое новое сообщение -- второе (от 21.08.2005 Вс, 15:58), а в списке тем этого форума всё правильно -- первое (от 21.08.2005 Вс, 00:35 с добавкой). А должно на главной странице отображаться первое (21.08.2005 Вс, 00:35 с добавкой) сообщение, как самое новое -- так и было до начала описанных манипуляций.

Как оно работает (IMHO)
При удалении сообщения вызывается функция update_post_stats() (includes/functions_post.php).
В ней (ещё не понял где именно) ищется самый свежий пост (last_post_id), но не по времени, а по номеру (post_id).
А надо бы по времени (post_time).

Я пока своими кривыми руками не полезу, а подумаю...

Добавлено спустя 24 минуты 56 секунд:

Скорее всего здесь:

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

			if ($post_data['last_topic'])
			{
				$sql = "SELECT MAX(post_id) AS last_post_id
					FROM " . POSTS_TABLE . "
					WHERE forum_id = $forum_id";
				if (!($result = $db->sql_query($sql)))
				{
					message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
				}

				if ($row = $db->sql_fetchrow($result))
				{
					$forum_update_sql .= ($row['last_post_id']) ? ', forum_last_post_id = ' . $row['last_post_id'] : ', forum_last_post_id = 0';
				}
			}
Добавлено спустя 18 минут 17 секунд:

А вот и решение предлагаю:
заменить

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

				$sql = "SELECT MAX(post_id) AS last_post_id
					FROM " . POSTS_TABLE . "
					WHERE forum_id = $forum_id";
на

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

				$sql = "SELECT post_id AS last_post_id
					FROM " . POSTS_TABLE . "
					WHERE forum_id = $forum_id
					ORDER BY post_time DESC
					LIMIT 1";
Чуть выше (для тем) такой ошибки быть не должно, т.к. последний пост в теме является последним и по времени, и по номеру:

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

				$topic_update_sql .= 'topic_replies = topic_replies - 1';

				$sql = "SELECT MAX(post_id) AS last_post_id
					FROM " . POSTS_TABLE . "
					WHERE topic_id = $topic_id";
				if (!($result = $db->sql_query($sql)))
				{
					message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
				}

				if ($row = $db->sql_fetchrow($result))
				{
					$topic_update_sql .= ', topic_last_post_id = ' . $row['last_post_id'];
				}
Добавлено спустя 1 час 36 секунд:

А вот теперь осмысленно: самое свежее сообщение в форуме (№ forum_id) может иметь не самый верхний номер, так как Advanced Posts Merging, "подпинывая" время сообщения, оставляет его номер неизменным, а до момента объединения в том же самом форуме, но в другой его теме, может появиться новое сообщение с большим номером. Функция update_post_stats() всегда считает, что самое свежее сообщение в форуме имеет наибольший номер, и в этом её надо разубедить. :)

А самое свежее сообщение в теме (№ topic_id) всегда имеет самый высокий номер, даже при слиянии.

Добавлено спустя 9 часов 19 минут 44 секунды:

Ещё момент -- файл includes/functions_admin.php

Заменить:

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

		case 'forum':
			$sql = "SELECT MAX(post_id) AS last_post, COUNT(post_id) AS total
				FROM " . POSTS_TABLE . "
				WHERE forum_id = $id";
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not get post ID', '', __LINE__, __FILE__, $sql);
			}

			if ( $row = $db->sql_fetchrow($result) )
			{
				$last_post = ( $row['last_post'] ) ? $row['last_post'] : 0;
				$total_posts = ($row['total']) ? $row['total'] : 0;
			}
			else
			{
				$last_post = 0;
				$total_posts = 0;
			}
На:

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

		case 'forum':
			$sql = "SELECT post_id AS last_post
				FROM " . POSTS_TABLE . "
				WHERE forum_id = $id
				ORDER BY post_time DESC
				LIMIT 1";
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not get post ID', '', __LINE__, __FILE__, $sql);
			}

			if ( $row = $db->sql_fetchrow($result) )
			{
				$last_post = ( $row['last_post'] ) ? $row['last_post'] : 0;
			}
			else
			{
				$last_post = 0;
			}

			$sql = "SELECT COUNT(post_id) AS total
				FROM " . POSTS_TABLE . "
				WHERE forum_id = $id";
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not get total posts', '', __LINE__, __FILE__, $sql);
			}

			if ( $row = $db->sql_fetchrow($result) )
			{
				$total_posts = ($row['total']) ? $row['total'] : 0;
			}
			else
			{
				$total_posts = 0;
			}
Добавлено спустя 1 минуту 56 секунд:

Я не в курсе, может и одним запросом можно обойтись -- у меня не получилось, но эта функция используется редко, но она полезная -- синхронизация форумов.
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Diver
phpBB 1.2.0
Сообщения: 15
Стаж: 18 лет 8 месяцев
Откуда: 25 RUS

Сообщение Diver »

Товарищи, не понимаю для чего нужен
no_msg_at_certain_forums.
Disables merging message at certain forums. перевел как Отключение склеивания мессяг в определенных форумах. Поставил после основного мода. и в чем разница?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 2 месяца
Поблагодарили: 2 раза

Сообщение Xpert »

Как перевели, так и работает. id форума в котором склейка прекращает работать жестко прописан в коде, вроде это 5.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Diver
phpBB 1.2.0
Сообщения: 15
Стаж: 18 лет 8 месяцев
Откуда: 25 RUS

Сообщение Diver »

А id форума это где?
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 6 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

Diver писал(а):id форума это где?

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

if ( $forum_id != 5)
я люблю daft punk | новый sugoi.ru
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 2 месяца
Поблагодарили: 2 раза

Сообщение Xpert »

Сори, ошибся сам с функциональностью. Сообщения склеиваются, но фраза "Добавлено спустя..." не добавляется.

По поводу id. Наведите мышь на ссылку на форум и увидите в ссылке что-то вроде f=43. 43 и есть внутренний номер форума.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Diver
phpBB 1.2.0
Сообщения: 15
Стаж: 18 лет 8 месяцев
Откуда: 25 RUS

Сообщение Diver »

нуу это я видел что если ид форума = 5 то работает. а как мне на форуме увидеть работу?

Добавлено спустя 56 секунд:

а. щас посмотрим

Добавлено спустя 3 минуты 48 секунд:

хм. а оно у меня правильно работает?
исходное сообщение было Один, потом ответил на тему словом Два. сообщение получилось ОдинДва, если отвечу словом Три, получится ОдинДваТри. Так?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 2 месяца
Поблагодарили: 2 раза

Сообщение Xpert »

Да.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
severnet
phpBB 2.0.5
Сообщения: 490
Стаж: 19 лет 5 месяцев
Откуда: Санкт-Петербург

Сообщение severnet »

Could not insert data into users table

DEBUG MODE

INSERT INTO phpbb_users (user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_interests, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_level, user_allow_pm, user_birthday, user_next_birthday_greeting, user_active, user_actkey) VALUES (482, 'Test', 1126967155, '202cb962ac59075b964b07152d234b70', 'rks@mail.wplus.net', '', '', '', '', '', '', '', '', 0, 0, '', '', '', 1, 1, 0, 1, 1, 0, 1, 1, 4, 'd M Y, D H:i', 'russian', 2, user_gender, 0, 1, '999999', '', 1, '')

Line : 672
File : usercp_register.php
Нужна помощь. :cry:

Добавлено спустя 33 минуты 27 секунд:

Не пойму, до этого все работало, а теперь нет. В чем может быть проблема?

Значение SQL добавлял запросом:
INSERT INTO phpbb_config (config_name, config_value) VALUES('time_to_merge', 0);
INSERT INTO phpbb_config (config_name, config_value) VALUES('merge_flood_interval', 0);
ALTER TABLE phpbb_posts ADD post_created INT(11) DEFAULT '0' NOT NULL AFTER post_time;
UPDATE phpbb_posts SET post_created = post_time;
Когда увидел ошибку в регистрации решил проинсталлировать скриптом advanced_posts_merging_db_ins.php, но выдает:
Advanced Posts Merging DB Update
Installation failed: Duplicate entry 'time_to_merge' for key 1
Добавлено спустя 1 минуту 31 секунду:

Кстати, слеивается все отлично, но вот регистрация не работает. :cry:
Изображение
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 4 месяца
Откуда: Москва

Сообщение Coagulant »

severnet писал(а):Нужна помощь.
Ошиблись при установке Gender Mod, а именно в файле usercp_register.php. APM тут совершенно не при чём.
severnet писал(а):Когда увидел ошибку в регистрации решил проинсталлировать скриптом advanced_posts_merging_db_ins.php
advanced_posts_merging_db_ins.php выполняет те же самые SQL-запросы, что вы уже сделали, нет нужды выполнять запросы вручную и запускать скрипт. Достаточно чего-то одного.
Аватара пользователя
severnet
phpBB 2.0.5
Сообщения: 490
Стаж: 19 лет 5 месяцев
Откуда: Санкт-Петербург

Сообщение severnet »

Coagulant, не могу найти:

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

#-----[ FIND ]------------------------------------------------ 
# 
$sql = "INSERT INTO " . USERS_TABLE . "
VALUES

# 
#-----[ IN-LINE FIND ]---------------------------------------- 
# 
, user_style

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------- 
# 
, user_gender
в строке файла usercp_register.php:

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

$sql = "INSERT INTO " . USERS_TABLE . "	(user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_interests, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_level, user_allow_pm, user_birthday, user_next_birthday_greeting, user_active, user_actkey)
				VALUES ($user_id, '" . str_replace("\'", "''", $username) . "', " . time() . ", '" . str_replace("\'", "''", $new_password) . "', '" . str_replace("\'", "''", $email) . "', '" . str_replace("\'", "''", $icq) . "', '" . str_replace("\'", "''", $website) . "', '" . str_replace("\'", "''", $occupation) . "', '" . str_replace("\'", "''", $location) . "', '" . str_replace("\'", "''", $interests) . "', '" . str_replace("\'", "''", $signature) . "', '$signature_bbcode_uid', $avatar_sql, $viewemail, '" . str_replace("\'", "''", str_replace(' ', '+', $aim)) . "', '" . str_replace("\'", "''", $yim) . "', '" . str_replace("\'", "''", $msn) . "', $attachsig, $allowsmilies, $allowhtml, $allowbbcode, $allowviewonline, $notifyreply, $notifypm, $popup_pm, $user_timezone, '" . str_replace("\'", "''", $user_dateformat) . "', '" . str_replace("\'", "''", $user_lang) . "', $user_style, '$gender', 0, 1, '$birthday', '$next_birthday_greeting', ";
Добавлено спустя 21 минуту 14 секунд:

Coagulant, всё нашел и исправил. Работает.

Добавлено спустя 1 час 26 минут 37 секунд:

Кстати, как интегрировать проверку сообщения Message too short для Extended Quick Reply Form?
Изображение
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 4 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

severnet
Кстати, как интегрировать проверку сообщения Message too short для Extended Quick Reply Form?
а может склонимся к соответствующим топикам?
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y

Вернуться в «Анонсы и поддержка модов для phpBB 2.0.x»