Рассмотрим рабочий вариант скрипта, который позволит ajax методом получать результаты поиска из БД при вводе пользователем поисковых запросов. Реализовывать это все мы будем за счет одного виджета autocomplete библиотеки jquery-ui.js
О том как делать автозаполнение полей я писал ранее и даже говорил о принципе поиска через PHP. Поэтому сегодня хочу более подробно рассмотреть процесс выгрузки результатов поиска не только в низпадайке (как если бы это был выпадайющий список), но и процесс создания таблицы результатов поиска с любыми данными из БД (ссылки, картинки, id номера, любые поля).
Создайте index.html , подключите в нем скрипты (как в моем примере) и пропишите код:
Из предыдущей публикации вы уже должны разбираться, что делает каждая строка. Обратим внимание на ключевые моменты.
- source — источник поиска, в данном случае файл, который лежит в той же директории, что и index.html
- minLength — минимальное число символов, чтобы поиск начал искать
- appendTo: ‘.uirezultbd’ — в какой html вставить результаты поиска (если убрать, будет низпадайкой, как в обычном случае)
- open: function(event, ui) — действие в момент поиска (когда набирается текст) — добавляем шапку результатов поиска
Т.е. скрипт работает так: когда мы вводим что-то в поле name=»s_search5″ , то идет обращение с этим запросом (как $_GET[‘term’] ) к файлу poiskbest.php . В нем делаем подключение к БД и ищем столбец методом LIKE на совпадение. Если что-то найдется, то возвратится JSON ответ, который подхватит наш скрипт в index.html. А результат поиска отобразится в классе uirezultbd .
Теперь рассмотрим poiskbest.php
//подключаемся к БД
$thisbd = @mysqli_connect(‘localhost’, ‘root’, », ‘swork’) or die(«Ошибка соединения с базой данных: «.mysql_error());
mysqli_query($thisbd, «SET NAMES utf8»);
$count = 0;
if($_GET[‘search_tip’] == ‘title’) < //Тип поиска - таких может быть бесконечно много - передается с autocomplete
$fetch = mysqli_query($thisbd, «SELECT * FROM wl8ac_content WHERE title LIKE ‘».mysqli_real_escape_string($thisbd, $_GET[‘term’]).»%’ ORDER BY title LIMIT 20″); //$_GET[‘term’] — поисковый запрос от autocomplete
while ($podrow = mysqli_fetch_array($fetch))
‘
Я думаю, из комментариев, которые есть в коде все ясно. Если кратко повторить, то сначала подключаемся к БД и ищем в таблице wl8ac_content (кстати, это материалы Joomla) записи по полю title. Также ограничиваем результаты поиска до 20 ( LIMIT 20 ). Далее формируем ассоциативный массив (в нем должны быть обязательно 2 параметра label и value ) из нужных полей, которые отобразятся в результатах. Для примера я взял 3 поля id, title, created , а 4-й «столбец» сделал ссылкой на материал. После того, как массив будет создан, возвратим данные методом json_encode() .
Весь этот скрипт и связь между autocomplete и полями я собрал методом проб и ошибок. Вы можете его подстроить так, как вам нужно. Мне нужно было лишь показать принцип взаимодействия.
Как правильно сделать живой поиск на сайте? Сделал запрос на сервер по keyup, но если пользователь набирает слово кирпич, то скрипт по каждой набранной букве отправляет запрос на сервер, тем самым, если пользователь наберет быстро, то он приходится ждать пока окончательный список сформируется, завершив поиск по каждой букве. А если набирая слово универсальный, написать униВВ, то результаты пропадают, тогда как на других сайтах, остается последний удачный результат. Вот тут например сделан по нормальному https://santika-online.ru
Какие механизмы для этого есть?
- Вопрос задан 17 июн.
- 1279 просмотров
Для работы с полями ввода есть набор событий:
1. focus — пользователь поставил фокус на поле ввода.
2. blur — пользователь убрал фокус с элемента вода.
3. input — пользователь как-то что-то ввел. Это лучше, чем keyup, ибо не надо проверки keyCode, второе потому что пользователь может в поле вставить текст, что тогда будет с Вашим keyUp? Событие input срабатывает каждый раз, как пользователь сделал изменение в поле ввода.
4. change — пользователь ввел данные и убрал фокус с поля ввода, то есть это input + blur. Событие происходит не так часто, как input, но и не заставляет проверять value на изменение, как это придется делать при blur.
5. submit — срабатывает на всей форме, при попытке отправить данные, в данной задаче скорее не интересное событие.
Для живого поиска логично использовать input, по которому надо отправить текущее value через ajax на сервер и далее ответ куда-то распечатать. Вопрос в другом, ведь событие срабатывает довольно часто, и кто-то печатает так быстро, что и запрос-ответ не успеет, поэтому логично сделать тут debounce с задержкой в приблизительно 300мс, чтобы отправка/получение сработало когда пользователь притормозил в наборе текста или вообще прекратил ввод.
Недавно мы говорили о библиотеках и фреймворках — и обещали, что попробуем что-нибудь на них собрать. Настало время.
Сегодня мы возьмём популярную библиотеку jQuery и сделаем на её основе поиск по странице. Браузеры это умеют делать встроенными инструментами, но с помощью нашего метода можно будет более тонко всё настроить и сделать поле поиска видимым и удобным.
- библиотека jQuery — она обеспечит работу нашего поискового плагина, потому что плагин сделан тоже для jQuery.
- плагин highlight — поможет нам найти нужные слова в тексте и подсветить их приятным цветом (каким захотим)
- поле ввода и кнопка — отвечают за сам интерфейс поиска.
Содержание
- Общая идея
- Готовим каркас
- Добавляем форму поиска и текст
- Общая идея
- Настраиваем стили
- Пишем скрипт
- Как можно улучшить
Общая идея
У нас есть сайт с неким текстом, и нам нужно быстро находить в нём нужные слова или части слов. Для этого мы в самом начале страницы делаем поле ввода, куда будем писать наши слова для поиска, и кнопку, которая этот поиск запускает.
Дальше скрипт берёт весь текст, находит в нём нужные фрагменты и подсвечивает их. Если он ничего не находит — пишет сообщение о том, что таких слов в тексте нет.
Готовим каркас
Сделаем как обычно — возьмём наш стандартный шаблон из предыдущих задач и немного поправим описания разделов. Сохраним его как .html-файл и открывать в браузере пока не будем — всё равно мы ничего не увидим на странице, кроме названия вкладки.
Добавляем форму поиска и текст
Наша форма поиска — это поле ввода и кнопка, которая запускает скрипт. Мы не будем сильно настраивать внешний вид формы, при желании вы можете сделать это сами — все нужные знания для этого у вас уже есть. Если что-то забыли — посмотрите, как мы настраивали вид поля ввода в статье про планировщик задач.
Добавим код формы сразу после тега :
Осталось добавить сам текст в блок
Общая идея
У нас есть сайт с неким текстом, и нам нужно быстро находить в нём нужные слова или части слов. Для этого мы в самом начале страницы делаем поле ввода, куда будем писать наши слова для поиска, и кнопку, которая этот поиск запускает.
Дальше скрипт берёт весь текст, находит в нём нужные фрагменты и подсвечивает их. Если он ничего не находит — пишет сообщение, что таких слов в тексте нет.
Сохраняем, открываем в браузере:
Настраиваем стили
Стили отвечают за внешний вид всех элементов на странице. Главное, что нам нужно сделать, — нормальный внешний вид формы поиска и выбрать подсветку для найденных результатов. Это мы настроим в блоке в начале страницы:
Сохраняем и обновляем страницу — теперь форма выглядит лучше:
Пишем скрипт
Задача скрипта — пробежаться по всему содержимому текста и сравнить все слова с тем, что мы ввели в строке поиска. Всю работу за нас сделает плагин highlight, нам остаётся только вывести количество найденных совпадений и очистить страницу от предыдущих результатов поиска.
Как можно улучшить
Можно убрать кнопку «Найти» и запускать поиск при вводе текста в поле.
Можно сделать два поля ввода, подсвечивая найденное по каждому разными цветами. Это полезно, например, если нужно проанализировать, каких слов в тексте больше.
Регулярные выражения! О них отдельно напишем, это же просто праздник какой-то.
Источник: