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

Поиск по комментариям сообщений

У вас есть идея для расширения функциональности phpBB 3.0.x? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Стаж: 16 лет 4 месяца
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз

Re: Поиск по комментариям сообщений

Сообщение Vova_OB »

После всех изменений по вашему совету заработало. но по части слова не ищет и я не знаю почему

Добавлено спустя 9 минут 54 секунды:
Sheer писал(а):$db->sql_like_expression(str_replace('*', $db->any_char, $term))

Что с этим сделать нужно чтобы искало по части слова или выражения?

Добавлено спустя 5 минут 1 секунду:
заработало, вот эта штука туда больше подходит

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

$db-> sql_like_expression( $db-> any_char. $term . $db-> any_char )
Благодарю за помощь))
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Стаж: 16 лет 4 месяца
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз

получить username используя только user_id возможно?

Сообщение Vova_OB »

получить username используя только user_id возможно?
Shredder
Former team member
Сообщения: 2267
Стаж: 17 лет 10 месяцев
Благодарил (а): 284 раза
Поблагодарили: 584 раза

Re: получить username используя только user_id возможно?

Сообщение Shredder »

Получить откуда и для чего?
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Стаж: 16 лет 4 месяца
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз

Re: получить username используя только user_id возможно?

Сообщение Vova_OB »

в новом модуле поиска комментариев нет запроса из таблицы пользователей, есть только user_id как автор комментариев, вот нужна функция которая только по ID дает имя пользователя и ссылку на профиль. делается это для вот этого Поиск по комментариям сообщений
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 11 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: получить username используя только user_id возможно?

Сообщение Pazh »

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

$sql = 'SELECT u.user_id, u.username, u.user_colour
				FROM ' . USERS_TABLE . ' u
				WHERE ' . $db->sql_in_set('u.user_id', $users_list);
			$result2 = $db->sql_query($sql);
			while ($row = $db->sql_fetchrow($result2))
			{
				$users_links[$row['user_id']] = get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']);
			}
			$db->sql_freeresult($result2);
где $users_list - массив из id юзеров
$users_links - массив с ссылками на профиль юзеров
Помощь в ЛС/email только за WM или ЮMoney
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Стаж: 16 лет 4 месяца
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз

Re: Поиск по комментариям сообщений

Сообщение Vova_OB »

Конечный вариант с поиском по комментариях тем,постов,профилей пользователей,описаний тем с учетом прав доступа и не срабатывании при пустом поле поиска, работает отлично:

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

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);


// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup(array('posting', 'search','mods/searchinlang'));


//$bb_code	= request_var('bbc', '');
$submit		= request_var('submit', false);
$submit2		= request_var('submit2', false);
$submit3		= request_var('submit3', false);
$start 		= request_var('s', 0);
$term 		=  request_var('term', '', true);
$term2 		=  request_var('term2', '', true);
$term3 		=  request_var('term3', '', true);

global $config, $phpbb_root_path, $phpEx, $template, $db, $user, $cache, $auth;

if ($submit)
{ 
 
 if($auth->acl_get('u_seecom'))
 {

	$sql = 'SELECT * FROM  '.  COMMENTS_TABLE .' WHERE text '.$db-> sql_like_expression( $db-> any_char. $term . $db-> any_char ).' COLLATE utf8_general_ci';
	$result = $db->sql_query($sql);
	
 if ($term != '') 
	{
	while ($row = $db->sql_fetchrow($result))
	{      
		$text = generate_text_for_display($row['text'], $row['bbcode_uid'], $row['bbcode_bitfield'], $row['bbcode_options']);
		$template->assign_block_vars('row', array(
		    'COMMENT_ID'	=> $row['id'],
            'POST_ID'		=> $row['post_id'],
			'POST_URL'	=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'p=' . $row['post_id'] . '#p' . $row['post_id']),
		    'COMMENT'		=> censor_text($text),
		    'COMMENT_TIME'	=> $user->format_date($row['comment_time']),
		));
	}
	}
 }
 
}

if ($submit2)
{
if ($auth->acl_get('u_viewprofile'))
	{
	$sql = 'SELECT * FROM  '.  WALL_TABLE .' WHERE wall_text '.$db-> sql_like_expression( $db-> any_char. $term2 . $db-> any_char ).'COLLATE utf8_general_ci';
	$result = $db->sql_query($sql);
	
	if ($term2 != '') 
	{
	while ($row2 = $db->sql_fetchrow($result))
	{   	
		$template->assign_block_vars('row2', array(
			
		    'U_USER'			=> append_sid("{$phpbb_root_path}memberlist.$phpEx","mode=viewprofile&u=".$row2['wall_user_id']),
		    'U_POSTER'			=> append_sid("{$phpbb_root_path}memberlist.$phpEx","mode=viewprofile&u=".$row2['wall_poster_id']),
			'WALL_USER_ID'		=> $row2['wall_user_id'],
            'WALL_POSTER_ID'	=> $row2['wall_poster_id'],
		    'WALL_COMMENT_TEXT'	=> censor_text($row2['wall_text']),
		    'WALL_COMMENT_TIME'	=> $user->format_date($row2['wall_time']),
		));		
	}	
	}
	}

}

if ($submit3)
{

	$sql = 'SELECT * FROM  '.  TOPICS_TABLE .' WHERE topic_desc '.$db-> sql_like_expression( $db-> any_char. $term3 . $db-> any_char ).'COLLATE utf8_general_ci';
	$result = $db->sql_query($sql);
	
	if ($term3 != '') 
	{
	while ($row3 = $db->sql_fetchrow($result))
	{	    
		if($auth->acl_get('f_read',$row3['forum_id']))
        {
		$template->assign_block_vars('row3', array(
			
		    'U_TOPIC'			=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=' . $row3['topic_id'] ),
		    'U_POSTER'			=> append_sid("{$phpbb_root_path}memberlist.$phpEx","mode=viewprofile&u=".$row3['topic_poster']),
            'TOPIC_POSTER_ID'	=> $row3['topic_poster'],
		    'TOPIC_DESC'	=> censor_text(parse_topic_desc($row3['topic_desc'])),
			'TOPIC_TITLE'	=> censor_text($row3['topic_title']),
		    'TOPIC_TIME'	=> $user->format_date($row3['topic_time']),
		));		
		}	
	}
	}

}



$template->assign_vars(array(
	'S_ACTION'	=> append_sid("{$phpbb_root_path}searchin.$phpEx"),

));

// Output the page
page_header($user->lang['SEARCH_IN']);

$template->set_filenames(array(
	'body' => 'searchin.html')
);

page_footer();

?>

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

<!-- INCLUDE overall_header.html -->
<form action="{S_ACTION}" method="post">  
<table class="tablebg" width="100%" cellspacing="1" cellpadding="4" border="0">
<tr>
<td class="row1" width="30%">
<b><a id="SCTP">{L_SEARCH_IN_COMMENTS_OF_TOPICS_AND_POSTS}:</a> </b>
</td> 
<td class="row1">
<input type="text" name="term"   size="35" /><input type="submit" name="submit"  value="{L_SUBMIT}"  class="btnmain"/>
</td>
</tr>
<tr>
<td class="row1">
<b><a id="SCUP">{L_SEARCH_IN_COMMENTS_OF_USERS_PROFILES}:</a> </b> 
</td>
<td class="row1">
 <input type="text" name="term2"   size="35"/><input type="submit" name="submit2"  value="{L_SUBMIT}"  class="btnmain"/> 
</td>
</tr>
<tr>
<td class="row1">
<b><a id="STD">{L_SEARCH_BY_TOPIC_DESCRIPTION}:</a> </b>  
</td>
<td class="row1">
<input type="text" name="term3"   size="35"/><input type="submit" name="submit3"  value="{L_SUBMIT}"  class="btnmain"/> 
</td>
</tr>
</table> 
</form> 
<!-- IF not S_IS_BOT and S_USER_LOGGED_IN -->
<!-- IF .row -->
<table class="tablebg" width="100%" cellspacing="1" cellpadding="4" border="0">
<tr> 
	<th width="80px">{L_COMMENT_ID}</th>
	<th width="80px" >{L_POST_ID}</th>
	<th >{L_COMMENT}</th>
	<th width="140px" >{L_COMMENT_TIME}</th>
</tr>
<!-- BEGIN row -->
	<tr>
	<td class="row1" align="center">{row.COMMENT_ID}</td>
	<td class="row1" align="center"><a href="{row.POST_URL}" target="_blank">{row.POST_ID}</a></td>
	<td class="row1" >{row.COMMENT}</td>
	<td class="row1" align="center"><b>{row.COMMENT_TIME}</b></td>
	</tr>
<!-- END row -->
</table>
<!-- ENDIF -->

<!-- IF .row2 -->
<table class="tablebg" width="100%" cellspacing="1" cellpadding="4" border="0">
<tr> 
	<th width="80px">{L_WALL_USER_ID}</th>
	<th width="80px" >{L_WALL_POSTER_ID}</th>
	<th >{L_WALL_COMMENT}</th>
	<th width="140px" >{L_WALL_COMMENT_TIME}</th>
</tr>
<!-- BEGIN row2 -->
	<tr>
	<td class="row1" align="center"><a href="{row2.U_USER}" target="_blank"> {row2.WALL_USER_ID}</a></td>
	<td class="row1" align="center"><a href="{row2.U_POSTER}" target="_blank">{row2.WALL_POSTER_ID}</a></td>
	<td class="row1" >{row2.WALL_COMMENT_TEXT}</td>
	<td class="row1" align="center"><b>{row2.WALL_COMMENT_TIME}</b></td>
	</tr>
<!-- END row2 -->
</table>
<!-- ENDIF -->
<!-- IF .row3 -->
<table class="tablebg" width="100%" cellspacing="1" cellpadding="4" border="0">
<tr> 
	<th >{L_TOPIC_TITLE}</th>
	<th >{L_TOPIC_DESC}</th>
	<th width="140px">{L_TOPIC_POSTER}</th>
	<th width="140px" >{L_TOPIC_TIME}</th>
</tr>
<!-- BEGIN row3 -->
	<tr>
	<td class="row1" ><a href="{row3.U_TOPIC}" target="_blank"> {row3.TOPIC_TITLE}</a></td>
	<td class="row1" >{row3.TOPIC_DESC}</td>
	<td class="row1" align="center"><a href="{row3.U_POSTER}" target="_blank">{row3.TOPIC_POSTER_ID}</a></td>
	<td class="row1" align="center"><b>{row3.TOPIC_TIME}</b></td>
	</tr>
<!-- END row3 -->
</table>
<!-- ENDIF -->
<!-- ENDIF -->
{L_SEARCH_IN_ACCESS}
<!-- INCLUDE overall_footer.html -->
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 8 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: получить username используя только user_id возможно?

Сообщение Sheer »

Vova_OB
Ты собираешься делать отдельный sql-запрос на каждый найденный комментарий? Однако-ж...
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Стаж: 16 лет 4 месяца
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз

Re: получить username используя только user_id возможно?

Сообщение Vova_OB »

Sheer писал(а):Ты собираешься делать отдельный sql-запрос на каждый найденный комментарий? Однако-ж...
не понял вопрос... там цикл и он сканирует таблицу и выводит искомые по совпадениям. я бы не сказал что это по запросу на коммент. что то не пойму.

в данном случяе мне юзернейм нужно вывести автора комментария id в таблице коментов есть
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 8 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: получить username используя только user_id возможно?

Сообщение Sheer »

Vova_OB писал(а):там цикл
Ага, только sql-запрос в цикле - это дурной тон.
Vova_OB писал(а):я бы не сказал что это по запросу на коммент.
Именно так
Vova_OB писал(а):для вот этого Поиск по комментариям сообщений
Найти

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

	$sql = 'SELECT * FROM  '.  COMMENTS_TABLE .' WHERE text '.$db-> sql_like_expression( $db-> any_char. $term . $db-> any_char ).' COLLATE utf8_general_ci';
Заменить на

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

	$sql = 'SELECT c.id, c.post_id, c.comment_time, c.text, c.bbcode_uid, c.bbcode_bitfield, c.bbcode_options, u.username
		FROM  '.  COMMENTS_TABLE . ' c, ' . USERS_TABLE . ' u
		WHERE c.poster_id = u.user_id
		AND c.text '.$db->sql_like_expression( $db->any_char. $term . $db->any_char ).'
		COLLATE utf8_general_ci';
Найти

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

		    'COMMENT_TIME'	=> $user->format_date($row['comment_time']),
Добавить после

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

		    'USER_NAME'		=> $row['username'],
В шаблоне

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

<td class="row1">{row.USER_NAME}</td>
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Стаж: 16 лет 4 месяца
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз

Re: получить username используя только user_id возможно?

Сообщение Vova_OB »

Работает,немного переделал:
Сделал запрос таким

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

$sql = 'SELECT c.id, c.post_id, c.comment_time, c.text, c.bbcode_uid, c.bbcode_bitfield, c.bbcode_options, u.username,u.user_id,u.user_colour
		FROM  '.  COMMENTS_TABLE . ' c, ' . USERS_TABLE . ' u
		WHERE c.poster_id = u.user_id
		AND c.text '.$db->sql_like_expression( $db->any_char. $term . $db->any_char ).'
		COLLATE utf8_general_ci';
а юзер нейм таким

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

'USER_NAME'		=>get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),

Вернуться в «Запросы модов для phpBB 3.0.x»