Skip to content

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

Добрый вечер. Не подскажете, есть ли для тройки хук, добавляющий в стандартный поиск функцию ajax - т.е. отображение результатов поиска наподобие live поиска, в маленьком окне без нажатия кнопки поиска?

 

Как на этом сайте, к примеру. www.ivi.ru

Featured Replies

  • Author

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

 

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

Edited by Strategius

  • Author

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

 

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

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

заменить на

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

 

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

заменить на

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

  • Author

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

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

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

  • Author

На это?

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

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

Edited by Strategius

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

 

после

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

добавить

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

  • Author

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

Edited by Strategius

Ограничивайте.

  • Author

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

  • Author

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

 

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

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

Edited by Strategius

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

 

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

  • Author

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

this.length заменить на this.value.length

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.