Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

 

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

Рекомендованные сообщения

Опубликовано:
  • Автор

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

 

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

Изменено пользователем Strategius

Опубликовано:
  • Автор

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

 

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);		
	}	

Изменено пользователем Strategius

Опубликовано:

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

заменить на

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

 

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

заменить на

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

Опубликовано:
  • Автор

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

Опубликовано:

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

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

Опубликовано:
  • Автор

На это?

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

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

Изменено пользователем Strategius

Опубликовано:

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

 

после

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

добавить

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

Опубликовано:
  • Автор

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

Изменено пользователем Strategius

Опубликовано:

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

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

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

 

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

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

Изменено пользователем Strategius

Опубликовано:

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

 

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

Опубликовано:
  • Автор

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

Опубликовано:

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

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

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.