Перейти к содержимому


Модуль живой поиск


  • Закрытая тема Тема закрыта
Сообщений в теме: 12

#1 vsupport

    Продвинутый пользователь

  • Администраторы
  • 758 сообщений
Репутация: 31
Ассистент

Отправлено 26 December 2011 - 04:58 PM

Изображение

Описание:
Модуль для отображения подсказки и выбора товаров при поиске.

Установка:
1. Отредактировать в файле autocomplete.php строчки

$dbname = "название базы данных";
$dbuser = "имя пользователя для подключения к базе данных";
$dbpass = "пароль пользователя для подключения к базе данных";
$dbhost = "хост для подключения к базе данных (обычно : localhost)";
$dbprfx = "префикс базы данных";

Уточнение: все эти значения Вы можете найти в файле core/config/connect.inc.php

2. Скопировать файл autocomplete.php в корень вашего сайта

3. Скопировать файлы autocomplete.js и autocomplete.css в папку data/"название вашего шаблона"/

4. Добавить в файл core/tpl/user/"название вашего шаблона"/head.tpl.html после строчки <script type="text/javascript" src="data/{$smarty.const.TPL}/user.js"></script> текст

 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script type="text/javascript" src="data/{$smarty.const.TPL}/autocomplete.js"></script>
{literal}
<script type="text/javascript">
$(document).ready(function() {

function liFormat (row) {
var result = row[0];
return result;
}

function selectItem(li) {
if( li == null ) var sValue = 'А ничего не выбрано!';
if( !!li.extra ) var sValue = li.extra[2];
else var sValue = li.selectValue;
document.forms["formpoisk"].submit();
//alert("Выбрана запись с ID: " + sValue);
}
$("#searchauto").autocomplete("autocomplete.php", { delay:5,minChars:1,matchSubset:1,autoFill:false,matchContains:1,cacheLength:10,selectFirst:false,maxItemsToShow:10,onItemSelect:selectItem })

});

</script>
{/literal}


5. Добавить в файл core/tpl/user/"название вашего шаблона"/head.tpl.html после строчки <link rel="shortcut icon" href="data/{$smarty.const.TPL}/favicon.ico" type="image/x-icon"> строку

<link rel="stylesheet" type="text/css" href="data/{$smarty.const.TPL}/autocomplete.css">


6. Отредактировать файл шаблона где расположена форма поиска (обычно core/tpl/user/"Имя вашего шаблона"/index.tpl.html). Необходимо найти строку с текстом <input type=text name="searchstring" и добавить id="searchauto" чтобы получилось <input id="searchauto" type=text name="searchstring"


Дополнительно:
- Стили отображения списка меняются в файле autocomplete.css
- Перед внесением изменений в шаблон обязательно нужно включить «Принудительную очистку кэша» (в общих настройках)


Прикрепленные файлы

  • Прикрепленный файл  live_search.rar   4.33К   4 Количество загрузок:

  • 0

#2 msidog

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 166 сообщений
Репутация: 42
Ассистент
  • ГородКривой Рог

Отправлено 26 December 2011 - 08:28 PM

на 3.1.2 не коректно работает =(
все сделал правильно но текст который вводишь не правильно ишет =(
  • 0
Мой хостинг <<<invitehost.ru>>>
vsupport.club --Лучшее решение всех проблем ;)

#3 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 26 December 2011 - 09:28 PM

на 3.1.2 не коректно работает =(
все сделал правильно но текст который вводишь не правильно ишет =(


а это уже проблема с кодировкой базы, смотрите строчку $ut = iconv('windows-1251','UTF-8', $f[name]);
так как у Вас верятнее всего база не UTF-8
  • 0
Изображение Изображение Изображение

#4 msidog

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 166 сообщений
Репутация: 42
Ассистент
  • ГородКривой Рог

Отправлено 27 December 2011 - 12:41 PM

хммм нужно проверить бо база по моему в ср1251
  • 0
Мой хостинг <<<invitehost.ru>>>
vsupport.club --Лучшее решение всех проблем ;)

#5 sealabs

    Пользователь

  • Assistent vsupport.club
  • PipPip
  • 12 сообщений
Репутация: 6
Начинающий

Отправлено 02 January 2012 - 05:22 PM

не хватает закрывающего тега {/literal}

а как сделать чтобы после поиска поле ввода оставалось пустым, а не висела строка поиска?
и можно ли сделать, чтобы то что ищут писалось куда -нибудь в файл?
  • 0

#6 Alex57

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 51 сообщений
Репутация: 31
Ассистент
  • ГородОрел

Отправлено 03 January 2012 - 03:27 PM

Поставил себе, но у меня почему-то на главной странице магазина не работает, на остальных работает. В чем причина может знает кто?
  • 0

#7 msidog

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 166 сообщений
Репутация: 42
Ассистент
  • ГородКривой Рог

Отправлено 04 January 2012 - 01:14 AM

честно сказать хз....у меня сайт то работает но не правильно ищет...у меня почему то в базе закарлючки не понятной кодировки =(
sealabs, где не хватает тега?
  • 0
Мой хостинг <<<invitehost.ru>>>
vsupport.club --Лучшее решение всех проблем ;)

#8 AVATARA

    Пользователь

  • Пользователи
  • PipPip
  • 10 сообщений
Репутация: 0
Начинающий

Отправлено 09 January 2012 - 03:06 PM

где не хватает тега?

в конце 4 пункта

тэкс скрипт работает вроде нормально, но есть пара недостатков
1) не воспринимает кавычки
2) когда не может ничего найти (или введено мало символов) показывает самые старые товары

если поставить minChars:2,matchSubset:3 имхо немного адекватнее ищет
  • 0

#9 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 19 January 2012 - 04:19 PM

все сделал правильно но текст который вводишь не правильно ишет =(

Я пока вообще не понял, как оно что-то ищет. функцией js, чтоли?
$qqq = mysql_query("SELECT productID,name FROM ".$dbprfx."products WHERE enabled=1");
for ($i=0; $i<mysql_num_rows($qqq); $i++) {
$f=mysql_fetch_array($qqq);
print"$f[name]\n";}

Выборка всех товаров по базе. А если товаров стопицот? Или я чего-то не понимаю?

---------- Сообщение объединено ----------

Хмм.... Если я правильно понимаю, то js выполняется на стороне клиента. Т.е. при базе на стопицот товаров сформируется массив из стапицот названий, которые зашлются на сторону клиента, чтобы уже там из них отобрался один-три-десять товаров, попадающих под набранную маску.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#10 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 19 January 2012 - 09:05 PM

Хмм.... Если я правильно понимаю, то js выполняется на стороне клиента. Т.е. при базе на стопицот товаров сформируется массив из стапицот названий, которые зашлются на сторону клиента, чтобы уже там из них отобрался один-три-десять товаров, попадающих под набранную маску.

я у себя в выборке добавил limit 50, городить массив больше смысла нет, как мне кажется.
  • 0
502 Bad Gateway

#11 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 20 January 2012 - 07:08 AM

я у себя в выборке добавил limit 50, городить массив больше смысла нет, как мне кажется.

А смысл LIMIT NN для ЭТОГО варианта? БУдет получена SQL-выборка из первых NN товаров в базе, c самыми младшими productID, т.е. NN самых старых товаров. Совершенно независимо от строки поиска. А потом ява-скрипт будет из этой выборки делать уже свою, соответствующую строке поиска. Потому и пишут, что ищет странно, показывает самые старые товары. А это не "ищет странно", а просто из-за неверной кодировки (?) под критерий попадает вся выборка, а показываются только первые maxItemsToShow:10 :).

PS. Позволю себе еще раз акцентировать внимание на строчке, задающей результатат выборки:
SELECT productID,name FROM ".$dbprfx."products WHERE enabled=1
Может, я чего-то не понимаю, но, на мой взгляд, так писать категорически нельзя, нерационально и ресурсоемко.

update: Хотя нет, там прописано cacheLength:10, т.е. на каждый десятый поиск вхождения запрос к серверу будет выполнен снова. Тот же самый, по всем товарам. Зачем? Почему не cacheLength:1000? :)

---------- Сообщение объединено ----------

Кстати, это я еще недостаточно разобрался в jquery или и правда функция liFormat тут совершенно лишняя? Закомментировал - ничего не изменилось, работает :).

update: так и есть. Эта функция есть в примерах применения autocomplete.js, но чтобы она была востребована нужно задать formatItem:liFormat, а этого не сделано. Видимо, как было содрано с примера, так и оставлено :).

delay:5 тоже доставляет. Если юзер набивает название медленнее, чем 200символов/сек, то на каждый символ обработка будет делаться заново, а на каждые десять - новый запрос к серверу всего списка товаров.
Дефолтовое значение - delay:400 :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 20 January 2012 - 10:19 AM

А, блин, точно. тут же другой совершенно код. Сам уже запутался :)
  • 0
502 Bad Gateway

#13 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 13 April 2012 - 03:22 PM

Более актуальная версия модуля "Живой поиск" здесь >> Живой поиск
  • 0