Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Strategius

Быстрый поиск

Recommended Posts

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

Нужная строчка в функции вроде присутствует:

 

$('#als_results').hide();

Всю голову уже сломал... Не ичезает и все, помогает только перезагрузка страницы. Помогите исправить этот баг, пожалуйста...

 

Оформил id-шник #als_results для визуализации бага: Ajax Live Search v1.3 for IP.Board v3.4.x.zip

Share this post


Link to post
Share on other sites

Подскажите, пожалуйста, как доработать sql-запрос, чтобы поиск производился только по первой букве слов?

 

Например, ищу словосочетание "Медведь Плюшевый", ввожу в поле поиска букву "е" и мне выдается: "Медведь Плюшевый". А нужно, чтобы его можно было найти только по буквам "м" и "п"... Не подскажете?

Edited by Strategius

Share this post


Link to post
Share on other sites

Код, отвечающий за вывод результата:

 

if( sizeof($searchStrings) == 1)
	{    
		$searchSQL 		= mysql_query("SELECT * FROM ".$topics_table." WHERE approved='1' AND state!='link' AND forum_id IN ( $forum_ids ) AND title LIKE '%".$searchString."%' ORDER BY ".$sortby." DESC LIMIT ".$LIMIT);
		$total_results 	= mysql_num_rows(mysql_query("SELECT * FROM ".$topics_table." WHERE approved='1' AND state!='link' AND forum_id IN ( $forum_ids ) AND title LIKE '%".$searchString."%' "));			
	}

	if( sizeof($searchStrings) > 1)
	{
		$i=1;
	    $searchSQL = "SELECT * FROM ".$topics_table." WHERE approved='1' AND state!='link' AND forum_id IN ( $forum_ids ) AND title LIKE '%".$searchStrings[0]."%' ";
	    while($i < sizeof($searchStrings))
	    {         
	    	$searchSQL .= " AND title LIKE '%".$searchStrings[$i]."%' ";
	        $i++;                
	    }
			$total_results = mysql_num_rows(mysql_query($searchSQL));

	        $searchSQL .= " ORDER BY ".$sortby." DESC LIMIT ".$LIMIT;
	        $searchSQL = @mysql_query($searchSQL);		
	}	

Edited by Strategius

Share this post


Link to post
Share on other sites

AND title LIKE '%".$searchStrings[$i]."%'

заменить на

AND title REGEXP '[[:<:]]".preg_quote( $searchStrings[$i] )."'

 

AND title LIKE '%".$searchString."%'

заменить на

AND title REGEXP '[[:<:]]".preg_quote( $searchString )."'

  • Upvote 1

Share this post


Link to post
Share on other sites

Внес правки, но все равно почему-то не работает... Поиск выдает результаты по одной любой букве (не первой в словах), да и еще часть букв отсеклась и по ним поиск вообще не работает...

Share this post


Link to post
Share on other sites

title LIKE '%".$searchStrings[0]."%'

тоже нужно заменить

Share this post


Link to post
Share on other sites

На это?

title REGEXP '[[:<:]]".preg_quote( $searchStrings[0] )."'

Заменил, но тоже не работает...

Edited by Strategius

Share this post


Link to post
Share on other sites

На всякий случай установите кодировку соединения с mysql

 

после

$als_select_db 	= mysql_select_db($INFO['sql_database'], $als_connect_db);

добавить

if($INFO['sql_charset']){
mysql_set_charset($INFO['sql_charset']);
}

Share this post


Link to post
Share on other sites

Эффекта нет :( Даже без последней правки (и с ней тоже) выдает нулевой результат поиска... Может тогда просто ограничить запрос вводом хотя бы трех символов, чтобы облегчить задачу? Заодно и запрос к БД не будет таким тяжелым...

Edited by Strategius

Share this post


Link to post
Share on other sites

А как не подскажете, пожалуйста? Хотя это и не очень правильное решение, очень жалко, что по первым символам не работает :( В чем же все-таки проблема может быть?

Share this post


Link to post
Share on other sites

Добавил такой код в input: pattern='.{3,}'

 

$html .= "<input type='text' pattern='.{3,}' placeholder='".$als_placeholder."' name='search_term' id='als_input' size='17' />";

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

Edited by Strategius

Share this post


Link to post
Share on other sites

Для лайв поиска?

 

	$('#search_term').keyup(function(){
		if(this.value.length >= 3){
			page = 1;
			sendToSearch(page);
		}
	});

Share this post


Link to post
Share on other sites

Да, для лайв. Вообще перестало работать, не ищет с такой доработкой... Надо, чтобы искало после ввода трех символов, а теперь вообще не ищет(

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...