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


Живой поиск (на autocomplete от jquery-ui)


  • Вы не можете ответить в тему
Сообщений в теме: 17

#1 badisoft

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

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

Отправлено 22 December 2013 - 05:03 PM

Живой поиск, сделанный на виджете autocomplete, входящем в iquery-ui

главные изменения относительно предыдущей версии на jquery.autocomplete от Joern Zaefferer:
1. при onclick мышкой на не пустой строке поиска происходит поиск
2. строка поиска сохраняется при переходе к выбранному товару и... см. п.1. Это реально удобно, как оказалось :).
3. Куда более открытая архитектура, дающая больше возможностей, хотя и не поддержанная (пока?) внятной документацией. Либо я хреново ее читаю, но конкретно забибикался с пониманием подмены _renderItem и _renderMenu, а как их подключать через $.widget так и не понял.

Внимание! Если у Вас jquery-ui версии 1.10 и выше, то закомментируйте строки для 1.8-1.9 и раскомментируйте для 1.10.


Установка:
==========


1. скопировать

ui-autocomplete.php -> корень сайта


2.В core/tpl/user/[свой шаблон]/head.tpl.html

2.1 прописать загрузку библиотек jquery и jquery-ui, если они еще не прописаны.

например


<link rel="stylesheet" type="text/css" href="http://ajax.googleap...jquery-ui.css">
<script type="text/javascript" src="http://ajax.googleap...n.js"></script>
<script type="text/javascript" src="http://ajax.googleap...n.js"></script>


2.2 после строки


{* подключение скриптов *}


вставить


{* живой поиск *}

{literal}
<style>
.ui-autocomplete-loading {background: white url('/data/admin/loader.white.gif') right center no-repeat;}
ul.ui-autocomplete {z-index:3!important;}
.my_odd {background: #eee;margin-top:1px!important;}
</style>

<script>
$(function() {

$( "#searchstring" ).autocomplete({
source: "/ui-autocomplete.php?limit=11&cID={/literal}{$current_currency}{literal}",
minLength: 3,
focus: function( event, ui ) {$("#searchstring").val( ui.item.value );return false;},
select: function( event, ui ) {
// window.location = ui.item.url;
$('#searchstring').val(ui.item.search);
$('#formpoisk').attr('action',ui.item.url);
$('#formpoisk').attr('method','post');
$('#formpoisk').submit();
}
});

$( "#searchstring" ).data("autocomplete")._renderMenu = function( ul, items ) {
var that = this;
$.each( items, function( index, item ) {that._renderItem( ul, item );});
$( ul ).find( "li:odd" ).addClass( "my_odd" );
// $( ul ).find( "li:even" ).addClass( "my_even" );
};

$( "#searchstring" ).data("autocomplete")._renderItem = function(ul, item) { // для jquery-ui 1.8-1.9
//.data( "ui-autocomplete" )._renderItem = function( ul, item ) { // для jquery-ui 1.10+
return $("<li></li>")
.data("item.autocomplete", item) // для jquery-ui 1.8-1.9
// .data("ui-autocomplete-item", item) // для jquery-ui 1.10+
.append(liFormat (item,$("#searchstring").val()))
.appendTo(ul);
};

});

function liFormat (item,term) {
if (item.type == '0')
return "<a><table cellpadding='0' cellspacing='5'><tr valign='middle'><td align='right' width='50' rowspan='2'><img height= '40' vspace='2' hspace='2' title='"
+item.name+"' src='"+item.filename+"'></td><td>"+highlight(item.name,term)+"</td></tr><tr><td>"+item.price+"</td></tr></table></a>";
else if (item.count-item.limit>0)
return "<a><table cellpadding='0'><tr valign='middle'><td>Это первые "+item.limit+" из "+item.count+".<br>Показать все?</td></tr></table></a>";
else if (item.count > 1)
return "<a><table cellpadding='0'><tr valign='middle'><td>Это все найденные.<br>Показать?</td></tr></table></a>";
else return "";
}

function highlight (value, term) {
var aterm = term.trim().split(' ');
for (var key in aterm)
value = value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + aterm[key].replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong style='color:red'>$1</strong>");
return value;
}
</script>
{/literal}



3.В core/tpl/user/[свой шаблон]/index.tpl.html

3.1 строку


<input type="text" name="searchstring" class="pform" value="{$searchstring}"></td>


заменить на


<input type="text" name="searchstring" class="pform" id="searchstring" value="{if $smarty.post.searchstring}{$smarty.post.searchstring}{else}{$searchstring}{/if}" onclick="$('#searchstring').autocomplete('search',$('#searchstring').val())" placeholder="найдется все : введите артикул или название товара"></td>




PS. Посмотреть, как оно работает можно традиционно на сайте в подписи :).

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


  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 makki

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

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

Отправлено 06 April 2014 - 07:49 PM

Нужно для jquery-ui 1.10.4. Закомментировал строки для 1.8-9 и раскоментировал для 1.10+
Получилось так. Но выпадает список без картинок.

$( "#searchstring" ).data("autocomplete")._renderMenu = function( ul, items ) {
  var that = this;
  $.each( items, function( index, item ) {that._renderItem( ul, item );});
  $( ul ).find( "li:odd" ).addClass( "my_odd" );
//  $( ul ).find( "li:even" ).addClass( "my_even" );
};

$( "#searchstring" ).data( "ui-autocomplete" )._renderItem = function( ul, item ) { // для jquery-ui 1.10+
//.data("autocomplete")._renderItem = function(ul, item) { // для jquery-ui 1.8-1.9
		 return $("<li></li>")
//   .data("item.autocomplete", item) // для jquery-ui 1.8-1.9
.data("ui-autocomplete-item", item) // для jquery-ui 1.10+
.append(liFormat (item,$("#searchstring").val()))
  .appendTo(ul);
};

  • 0

#3 badisoft

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

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

Отправлено 06 April 2014 - 08:02 PM

Нужно для jquery-ui 1.10.4. Закомментировал строки для 1.8-9 и раскоментировал для 1.10+ Получилось так. Но выпадает список без картинок.

Эти два варианта - до 10-й версии и после появились потому, что у меня стоит 1.8, а у заказчика стояла 1.10. Соответственно, один вариант работает (работает!) у заказчика, второй у меня. Это даже если не акцентироваться на том, что эти строки не имеют отношения к выводу картинок. Так что ищите где-то в другом месте. Проблема с непоказом картинок врядли имеет отношение к версии jquery. Скорее, по задаваемому пути к картинке этой картинки просто нет. А вот почему ее там нет - это firebug в руки и вперед.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 makki

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

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

Отправлено 15 June 2014 - 08:41 PM

В работе этой версии живого поиска (на autocomplete от jquery-ui) раздражает то, что когда наводишь мышкой на выпадающий список результатов поиска, меняется значение в строке поиска. Подскажите пожалуйста как это убрать?
  • 0

#5 badisoft

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

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

Отправлено 16 June 2014 - 12:20 PM

Подскажите пожалуйста как это убрать?

//focus: function( event, ui ) {$("#searchstring").val( ui.item.value );return false;},

  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 Revived

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

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

Отправлено 17 September 2014 - 10:44 PM

У makki работает на cpu.badisoft.ru тоже работает, у меня никак и нигде не работает, прям беда какая-то.
  • 0

#7 badisoft

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

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

Отправлено 18 September 2014 - 03:39 PM

у меня никак и нигде не работает, прям беда какая-то.

Такого описания проблемы достаточно лишь для сочувствия :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 Revived

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

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

Отправлено 18 September 2014 - 08:24 PM

у меня никак и нигде не работает, прям беда какая-то.

Такого описания проблемы достаточно лишь для сочувствия :).

Спасибо, на самом деле я расстроился. Но всё заработало. Дело было в том, что стоит модуль банеров который погружал jquery-1.4.4.min вот и получается трабл при совмещении двух библиотек. На jquery-1.8 модуль банеров работать отказались, ну не судьба, зато поиск заработал что меня больше радует. :)
  • 0

#9 hedhedhed

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

  • Download User
  • PipPipPip
  • 107 сообщений
Репутация: 4
Начинающий

Отправлено 20 August 2015 - 01:01 PM

Как исправить:
1. Та же беда - в поисковой строке не показывает картинки. В старой версии живого поиска все было нормально и очень долго, пока не поставил этот новый :).
Какие файлы смотреть, куда копать ?
2. Вообще не выдает в поиске товары, которые на складе "0". Это тоже совсем неудобно.
?
  • 0

#10 makki

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

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

Отправлено 09 February 2016 - 02:17 PM

Что то не получается прикрутить Живой поиск в шаблоне 3.1.3
Выдает ошибку var.replace not a function
  • 0

#11 badisoft

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

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

Отправлено 09 February 2016 - 03:09 PM

Выдает ошибку var.replace not a function

Начните с убирания этой функции. Она в function highlight и отвечает за подсветку слов поиска в найденных названиях товаров.
Там можно для простоты на время отладки прописать value=value вместо строки с replace, а разбираться уже потом.
Где-то я встречался с таким глюком, победить так и не смог, просто отказался от подсветки.
Но особо и не разбирался, т.к. подветка в ТЗ не входила.
С 3.1.3 не связано, там был 3.1.2.

PS. На badisoft.ru 3.1.3 и там стоит именно эта версия живого поиска. Хайлайт (т.е. и replace) вполне работает.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 vakkula

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

  • Download User
  • PipPipPip
  • 101 сообщений
Репутация: 6
Начинающий

Отправлено 16 March 2016 - 04:34 PM

Добрый день.
Столкнулся с проблемой Uncaught TypeError: $(...).autocomplete is not a function на шаблоне shopcms выдает ошибку
а на default все норм.
Может у кого было такое?
  • 0

#13 badisoft

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

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

Отправлено 16 March 2016 - 06:11 PM

$(...).autocomplete is not a function на шаблоне shopcms

Закомментируйте загрузку jquery в index.tpl.html
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#14 Den

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

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

Отправлено 18 March 2016 - 09:27 AM

А в этом модуле сортировка найденных товаров тоже только по наименованию?
  • 0

#15 badisoft

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

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

Отправлено 18 March 2016 - 11:12 AM

А в этом модуле сортировка найденных товаров тоже только по наименованию?

"Тоже" - это как?
Мной выложены три модуля "Живого поиска" - на какой-то старой библиотеке autocomplete с форума, на autocomplete от Zaefferer-а и на autocomplete-ui. Ни в одном из них нет сортировки вообще. Я об это просто не подумал. Как в таблице лежало, так и выдаст. См. строку SELECT-а в PHP-файле. Но никто не мешает вставить в эту строку любой желаемый ORDER BY.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#16 Den

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

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

Отправлено 19 March 2016 - 12:56 PM

А в этом модуле сортировка найденных товаров тоже только по наименованию?

"Тоже" - это как?
Мной выложены три модуля "Живого поиска" - на какой-то старой библиотеке autocomplete с форума, на autocomplete от Zaefferer-а и на autocomplete-ui. Ни в одном из них нет сортировки вообще. Я об это просто не подумал. Как в таблице лежало, так и выдаст. См. строку SELECT-а в PHP-файле. Но никто не мешает вставить в эту строку любой желаемый ORDER BY.

Век живи век учись, даже не думал что это настолько просто решить) Спасибо!

Распишу подробнее для таких же как я :)
В devsearch.php или ui-autocomplete.php (в зависимости от версии модуля поиска) в строке
$data = db_query("SELECT t1.productID,t1.product_code,t1.name,t1.price,t2.filename
добавляем выборку поля пользовательской сортировки t1.sort_order, в результате получаем строку
$data = db_query("SELECT t1.productID,t1.product_code,t1.name,t1.price,t1.sort_order,t2.filename
а ниже по коду, между строками
WHERE $filter t1.enabled = '1' AND t1.categoryID > '1'
LIMIT $limit");
вставляем саму сортировку
ORDER BY t1.sort_order ASC

  • 0

#17 sborka96

    Новичок

  • Download User
  • Pip
  • 5 сообщений
Репутация: 0
Начинающий

Отправлено 11 October 2016 - 03:12 PM

Ребят, а кто-нибудь делал правки для структуры 3.1.3 ?
  • 0

#18 badisoft

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

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

Отправлено 11 October 2016 - 04:04 PM

Ребят, а кто-нибудь делал правки для структуры 3.1.3 ?

А что там нужно править "для структуры 3.1.3"? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)