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

одинаковые темы

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
Ivantor

одинаковые темы

Сообщение Ivantor »

стоит задача: при добавлении темы с неким названием проверять, нет ли темы с точь-в-точь таким же названием, и, если такая тема есть, делать message die и выдавать ссылку на эту тему.
Скажите, как на php сделать такую штуку?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Зарегистрирован: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Сообщение rxu »

Если по-быстрому:

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

OPEN
posting.php

FIND
	switch ( $mode )
	{
		case 'editpost':
		case 'newtopic':
		case 'reply':
		

		
			$username = ( !empty($HTTP_POST_VARS['username']) ) ? $HTTP_POST_VARS['username'] : '';
			$subject = ( !empty($HTTP_POST_VARS['subject']) ) ? trim($HTTP_POST_VARS['subject']) : '';
			$message = ( !empty($HTTP_POST_VARS['message']) ) ? $HTTP_POST_VARS['message'] : '';
			$poll_title = ( isset($HTTP_POST_VARS['poll_title']) && $is_auth['auth_pollcreate'] ) ? $HTTP_POST_VARS['poll_title'] : '';
			$poll_options = ( isset($HTTP_POST_VARS['poll_option_text']) && $is_auth['auth_pollcreate'] ) ? $HTTP_POST_VARS['poll_option_text'] : '';
			$poll_length = ( isset($HTTP_POST_VARS['poll_length']) && $is_auth['auth_pollcreate'] ) ? $HTTP_POST_VARS['poll_length'] : '';
			$bbcode_uid = '';
			

AFTER, ADD

			if ($mode == 'newtopic')
				{
					   $sql = "SELECT topic_id
								FROM " . TOPICS_TABLE . "
								WHERE topic_title = ".$subject;

					if(!$result1 = $db->sql_query($sql))
					{

						message_die(CRITICAL_ERROR, 'Could not select topic_id', "", __LINE__, __FILE__, $sql);

					}

					elseif ($test = $db->sql_fetchrow($result1))
						{
							$message = 'Topic already exists '. sprintf('%shere%s','<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=" . $test['topic_id']) . '">', '</a>');
							message_die(GENERAL_MESSAGE, $message);
						
						}
				}
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Зарегистрирован: 18 лет 11 месяцев
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

Вариант работающий

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

#
#--- [ OPEN ] --------------
#
includes/functions_post.php

#
#--- [ FIND ] --------------
#
		$topic_vote = (!empty($poll_title) && count($poll_options) >= 2) ? 1 : 0;

#
#--- [ BEFORE, ADD ] --------------
#
		$sql = 'SELECT topic_id 
			FROM ' . TOPICS_TABLE . " 
			WHERE LCASE(topic_title) = '" . strtolower($post_subject) . "'" . (($mode == 'editpost' && $post_data['first_post']) ? ' AND topic_id <> ' . $topic_id : ''); 
		if(!$result = $db->sql_query($sql)) 
		{ 
			message_die(GENERAL_ERROR, 'Could not select topic_id', "", __LINE__, __FILE__, $sql); 
		} 
		elseif ($topic_data = $db->sql_fetchrow($result)) 
		{ 
			$message = sprintf($lang['Topic_already_exists'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . '=' . $topic_data['topic_id']) . '">', '</a>'); 
			message_die(GENERAL_MESSAGE, $message); 
		} 

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

#
#--- [ FIND ] --------------
#
//
// That's all, Folks!
// -------------------------------------------------

#
#--- [ BEFORE, ADD ] --------------
#
$lang['Topic_already_exists'] = 'Topic already exists. Click %sHere%s to view to the topic.';
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
Ivantor

Сообщение Ivantor »

Большое спасибо! будем экспериментировать.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Зарегистрирован: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Сообщение rxu »

Ivantor, а так ли часто встречаются абсолютно одинаковые названия тем, чтобы делать по этому поводу мод?
Изображение
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Зарегистрирован: 18 лет 11 месяцев
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

Есть еще один нюанс. SQL-запрос выполняется достаточно медленно, поскольку используется неиндексированное поле. Можно проиндексировать таблицу pphbb_topics по topic_title,
типа ALTER TABLE `pphbb_topics` ADD INDEX (`topic_title`);
но стоит ли это делать?

Добавлено спустя 3 часа 17 минут 28 секунд:

Кстати rxu, а вы не забыли про ночной кошмар админов и модеров форумов? Я имею в виду спам ботов.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
Ivantor

Сообщение Ivantor »

rxu писал(а):Ivantor, а так ли часто встречаются абсолютно одинаковые названия тем, чтобы делать по этому поводу мод?
у меня специфическая задача: есть каталог устройств, и нужно, чтобы в отдельном форуме можно было создать на каждое устройство ровно по одной теме :) собственно, задача состояла из двух частей: 1. дать возможность пользователям создавать темы, названия которых совпадают с названиями устройств;
2. так как сайт весьма посещаемый, а устройств весьма много -избежать повторных созданий тем.
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Зарегистрирован: 18 лет 11 месяцев
Откуда: Оренбург (Южный Урал)
Благодарил (а): 3 раза

Сообщение Поручик »

А к этой фиче еще и мод Double Post Control привинтить, вообще хорошо будет.

Здесь бурное обсуждение мода.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
Fedor25
phpBB 1.2.0
Сообщения: 10
Зарегистрирован: 16 лет 10 месяцев

Сообщение Fedor25 »

Буду очень благодарен, если дадите ссылку на мод по удалению одинаковых тем. Если такого мода нет, то может у кого-то есть скриптик, который выполнят данную задачу?
Аватара пользователя
chipp
phpBB 1.4.3
Сообщения: 89
Зарегистрирован: 17 лет 1 месяц
Откуда: Беларусь, Минск

Сообщение chipp »

Fedor25, если название одинаковое, то удалять??
Хочешь задать вопрос? Подумай! Может его уже задавали? Поиск жжет! И еще: если ошибка на буржуйском, на то есть словарь:!:
Fedor25
phpBB 1.2.0
Сообщения: 10
Зарегистрирован: 16 лет 10 месяцев

Сообщение Fedor25 »

Ну да. Есть во всем форуме 3 одинаковых темы:
Тема 1
Тема 1
Тема 1

1-й вариант - удалять их все.
2-й вариант - удалять все, но 1 оставить (причем неважно какую именно).

Мне в принципе подойдет любой вариант.
Аватара пользователя
chipp
phpBB 1.4.3
Сообщения: 89
Зарегистрирован: 17 лет 1 месяц
Откуда: Беларусь, Минск

Сообщение chipp »

Я сделаю так, что останется самая поздняя или самая ранняя(на Ваше усмотрение)
Хочешь задать вопрос? Подумай! Может его уже задавали? Поиск жжет! И еще: если ошибка на буржуйском, на то есть словарь:!:
Fedor25
phpBB 1.2.0
Сообщения: 10
Зарегистрирован: 16 лет 10 месяцев

Сообщение Fedor25 »

Самая поздняя пусть остается.
Fedor25
phpBB 1.2.0
Сообщения: 10
Зарегистрирован: 16 лет 10 месяцев

Сообщение Fedor25 »

5 дней прошло. Можно еще надеятся? Или тема умерла?

Вернуться в «Поддержка phpBB 2.0.x»