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


Живой поиск (с картинками)


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

#161 Pioneer

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

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

Отправлено 03 August 2013 - 01:34 PM

Еще заметил особенность.

При наборе символов в строке в Opera, IE,Chrome ищет все хорошо, а вот при стирании результаты возвращаются только в IE,Chrome. В Opera при стирании символов ничего не происходит, нужно только опять начать что-нибудь набирать. Глюк браузера или можно написать ему , чтобы результаты возвращались?
Согласитесь, часто бывает ситуация- человек что-то увидел нужное в поиске, но уже нажал следующую букву, результаты выдало другие, и простым стиранием символа уже не вернуть, надо опять набирать предпоследнюю букву.
  • 0

#162 Pioneer

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

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

Отправлено 11 August 2013 - 11:08 PM

Badisoft, не будете ли так любезны подсказать, как сделать чтобы при клике по выпадающим результатам поиска не включалась штатная функция поиска товара, а просто переходило на product_detailed, того товара , на который кликнули в списке?
  • 0

#163 badisoft

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

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

Отправлено 12 August 2013 - 12:17 AM

Badisoft, не будете ли так любезны подсказать, как сделать чтобы при клике по выпадающим результатам поиска не включалась штатная функция поиска товара, а просто переходило на product_detailed, того товара , на который кликнули в списке?

Сходу не подскажу, не делал такой реализации. Навскидку думаю, что надо в выпадающем списке формировать соответствующие найденным товарам ссылки.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#164 ZAHAL

    Новичок

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

Отправлено 30 August 2013 - 03:48 PM

поиск работает, но не ищет по артикулу. В чем может быть дело?

ZAHAL, То есть не выдает товры в названии которых не прописан артикул товара. http://сочи-автолидер.рф
Вот к примеру вбиваю артикул с самого начала 8D0807345A3FZ , а этого товара в живом поиске нету, хотя если вбить полностью - выдает.
  • 0

#165 badisoft

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

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

Отправлено 30 August 2013 - 05:51 PM

поиск работает, но не ищет по артикулу. В чем может быть дело?

В том, что он не ищет по артикулу. См. SQL-запрос в файле devsearch.php.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#166 ZAHAL

    Новичок

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

Отправлено 31 August 2013 - 10:23 AM

всё равно не могу ни чего сделать :( , как этот запрос изменить? Что только не писал там
  • 0

#167 badisoft

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

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

Отправлено 31 August 2013 - 12:56 PM

Что только не писал там

"Войну и мир" пробовали туда писать? Вдруг поможет.

#$filter = "";
$filter = "t1.product_code like '%$q%' OR ";

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

#168 ZAHAL

    Новичок

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

Отправлено 03 September 2013 - 11:44 AM

:D ура !!! победил , вот так
$filter = "";
foreach (explode(" ",$q) as $word)
$filter .= "product_code like '%$word%' OR t1.name like '%$word%' AND ";
  • 0

#169 makki

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

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

Отправлено 04 September 2013 - 12:49 PM

В последней версии модуля в файле devsearch.php есть такой запрос
$data = db_query("SELECT t1.product_code,t1.name,t1.price,t2.filename
FROM ".DB_PRFX."products t1
LEFT JOIN ".DB_PRFX."product_pictures t2 ON t1.default_picture = t2.photoID
WHERE $filter t1.enabled = '1' AND t1.categoryID <> '1'
LIMIT ".$_GET['limit']) or die( db_error() );

Кто-то подскажет зачем там LIMIT ".$_GET['limit'] и я что-то не нашел откуда передается limit ?

Также заметил, что не все товары ищутся. Закономерности не нашел.
  • 0

#170 badisoft

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

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

Отправлено 04 September 2013 - 02:39 PM

Кто-то подскажет зачем там LIMIT ".$_GET['limit'] и я что-то не нашел откуда передается limit ?

В head.tpl.html Вы вписывали код, содержащий в том числе и
$("#targetDiv").autocomplete("devsearch.php", {
max: 30,
highlight: false,
scroll: true,
scrollHeight: 600,
width:250,
formatItem:liFormat
});

Вот max:30 это и есть задание $_GET['limit'].
Это фишка именно этой библиотеки aotocomplete.js, их много разных.

А нужен LIMIT nn затем, чтобы ограничить список отфильтрованных товаров. Какой смысл от выпадающего списка на пару-тройку сотен товаров, даже если они будут скроллиться? Другое дело, что сейчас я бы делал немного не так. Еще одним запросом (без LIMIT) выяснял бы вообще количество подходящих товаров и если их больше лимита, то последним пунктом выпадающего списка выдавал бы что-то типа "Это не все подходящие под запрос товары, а только первые 30 найденных...."
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#171 mebel

    Новичок

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

Отправлено 21 September 2013 - 06:17 PM

Я и так и так ставил, перепроверил себя 100 раз, не работает модуль
  • 0

#172 vakkula

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

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

Отправлено 06 November 2013 - 01:08 PM

как сделать так что бы при поиске не выбиралось первое значение которое нашлось? и срабатывал по кнопке enter ?
  • 0

#173 kotaaa

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

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

Отправлено 29 November 2013 - 09:01 AM

Привет всем.
Вопрос уважаемому разработчику badisoft'у.

1. При поиске в выпадающем списке товаров с картинками, цены на товар такого плана получаются:
$113 400.0 / 2793.60 (а тут вообще значок ЕВРО!!!). Цены в магазине в рублях.
Как бы это исправить?

2. В файле index.tpl.html после замены строки
"<input type="text" name="searchstring" class="pform" value="{$searchstring}"></td>"
на
<input type="text" name="searchstring" id="targetDiv" value="{$searchstring}"></td>
перестают действовать стили от "pform". При этом ширина поля поиска суживается до 124px (считал с рамкой). Как бы расширить это поле?

С уважением, Kot.

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


  • 0

#174 badisoft

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

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

Отправлено 29 November 2013 - 10:38 AM

Как бы это исправить?

Прочитать тред целиком. Об этом упоминалось как минимум два раза.

При этом ширина поля поиска суживается до 124px (считал с рамкой). Как бы расширить это поле?

Вернуть на место class="pform". Когда я делал этот модуль, то почти не разбирался в HTML и замена class="pform" на id="targetDiv" была взята из какого-то модуля, послужившего основой. Сейчас я знаю, что смысла в ЗАМЕНЕ никакого, надо только id прописать было, но исправлять смысла уже не вижу.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#175 kotaaa

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

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

Отправлено 29 November 2013 - 08:57 PM

Прочитать тред целиком. Об этом упоминалось как минимум два раза.

Все решил. Ок.

А нужен LIMIT nn затем, чтобы ограничить список отфильтрованных товаров. Какой смысл от выпадающего списка на пару-тройку сотен товаров, даже если они будут скроллиться? Другое дело, что сейчас я бы делал немного не так. Еще одним запросом (без LIMIT) выяснял бы вообще количество подходящих товаров и если их больше лимита, то последним пунктом выпадающего списка выдавал бы что-то типа "Это не все подходящие под запрос товары, а только первые 30 найденных...."


Вот как раз не хватает самой малости, а именно - внизу выпадающего списка кнопку-ссылку поставить "Все результаты". Нажатием на кнопку будет тоже самое, что и нажатие кнопки поиска. Не пойму, как реализовать в Вашей конструкции? По идее надо прописать 2-ю (и последнюю <tr><td></tr></td>) строку в скрипте, что в файле head.tpl.html:

function liFormat (row, i, num) {
var result = "<table cellpadding='0' cellspacing='0'><tr valign='middle'><td align='center' width='80' rowspan='2'><img border = '0' height= '70' vspace='2' hspace='2' title='"
+row[1]+"' src='"+row[3]+"'></td><td>"+row[1]+"</td></tr><tr><td>"+row[2]+"</td></tr></table>";
return result;
}

Но какие параметры передавать и как - не понимаю...
  • 0

#176 badisoft

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

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

Отправлено 29 November 2013 - 11:16 PM

Вот как раз не хватает самой малости, а именно - внизу выпадающего списка кнопку-ссылку поставить "Все результаты".

Врядли это сложно, но я не занимался вопросом в силу отсутствия надобности. Это один из первых моих модулей, когда я только начинал разбираться с PHP, HTML, Smarty и структурой ShopCMS. За прошедшие три года я сильно изменился и, честно говоря, мои модули тех начальных времен (фильтр, ЧПУ, Живой поиск) мне уже не особенно интересны. Т.е. я с удовольствием проинсталлирую их за невеликую денежку, а также решу дополительные моменты за другую денежку, но вот обсуждать в треде, как реализовать какое либо "нечто" в этих модулях мне уже не интересно. Примитивные модули, а жизнь идет дальше. Есть намного интереснее задачи.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#177 kotaaa

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

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

Отправлено 30 November 2013 - 09:59 AM

Т.е. я с удовольствием проинсталлирую их за невеликую денежку, а также решу дополительные моменты за другую денежку


Ок, направил в личку ТЗ.
  • 0

#178 badisoft

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

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

Отправлено 02 December 2013 - 02:07 PM

Результаты мелкой текущей возни с модулем:
1.

Badisoft, не будете ли так любезны подсказать, как сделать чтобы при клике по выпадающим результатам поиска не включалась штатная функция поиска товара, а просто переходило на product_detailed, того товара , на который кликнули в списке?

Никак. На этой js-библиотеке - никак. В ней нет возможности задать функцию по нажатию выбранного элемента. Надо менять библиотеку, благо этих автокомплитов как грязи. Я в конце концов так и сделал, см. тестовый сайт в подписи.

2.

в файле devsearch.php применена функция show_price($row['price'],1)
где "1" (и чуть дальше "2") - это номера валют конкретно в вашей базе. Если у вас валют с такими СID нет, то будет выведено в дефолтовой валюте. Видимо, в Вашем случае это рубли. Посмотрите в таблице хххх_currency_types, какие у вас есть CIDы валют и подставьте нужные.

Можно проще и автоматически.
в head.tpl.html строку
formatItem:liFormat
заменяем на
formatItem:liFormat,
extraParams: {cID:{/literal}{$current_currency}{literal}}

а в devsearch.php заменяем show_price($row['price'],1) на show_price($row['price'],$_GET['cID'])


3. код $("#targetDiv").result(....) вообще нафиг не нужен, т.к. в этой библиотеке result не переопределяется. Собственно, потому и пункт (1).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#179 badisoft

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

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

Отправлено 13 December 2013 - 06:41 PM

Никак. На этой js-библиотеке - никак. В ней нет возможности задать функцию по нажатию выбранного элемента.

Есть, как оказалось. Просто описания нет, а она задается совсем не так, как в тех "автокомплитах", к которым есть описание.

update:
1. переход по клику на товар из списка происходит не в "результаты поиска", а сразу в подробное описание кликаемого товара.
2. если найдено товаров больше, чем задано показывать в списке, то в списке появляется пункт "Это первые X из YYY. Показать все?"
3. цена показывается в текущей выбранной валюте
4. "подсвечивается" жирным текстом в названиях строка поиска

Спонсор апдейта kotaa попросил упомянуть, что это именно он заплатил 1500руб за этот апдейт.



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


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

jquery.autocomplete.pack.js -> data/[шаблон]/
jquery.autocomplete.css -> data/[шаблон]/
autocomplete.php -> корень сайта


2.В core/tpl/user/[свой шаблон]/head.tpl.html после строки


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


вставить


{* живой поиск *}
<script type='text/javascript' src='data/{$smarty.const.TPL}/jquery.autocomplete.pack.js'></script>
<link rel="stylesheet" type="text/css" href="data/{$smarty.const.TPL}/jquery.autocomplete.css" />
{literal}
<script type="text/javascript">
$().ready(function() {

function liFormat (row, i, num) {
if (row[1] == '0')
var result = "<table cellpadding='0' cellspacing='5'><tr valign='middle'><td align='right' width='50' rowspan='2'><img height= '40' vspace='2' hspace='2' title='"
+row[0]+"' src='"+row[3]+"'></td><td>"+row[0]+"</td></tr><tr><td>"+row[2]+"</td></tr></table>";
else if (row[2]-row[3]>0)
var result = "<table cellpadding='0'><tr valign='middle'><td>Это первые "+row[3]+" из "+row[2]+".<br>Показать все?</td></tr></table>";
else if (num > 2)
var result = "<table cellpadding='0'><tr valign='middle'><td>Это все найденные.<br>Показать?</td></tr></table>";
else result = "";
return result;
}

$("#searchstring").autocomplete("/autocomplete.php", {
max: 10,
minChars: 3,
scroll: true,
cacheLength: 0,
//highlight: false,
selectFirst: false,
scrollHeight: 600,
width:360,
formatItem:liFormat,
extraParams: {cID:{/literal}{$current_currency}{literal}}
});

$("#searchstring").result(function(event, data, formatted) {
if (data[1] == '0')
window.location = '/product_'+data[4]+'.html';
else
window.location = 'index.php?searchstring='+data[0];
});

});
</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" value="{$searchstring}" id="searchstring"></td>

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

  • Прикрепленный файл  LiveSearch.zip   7.29К   12 Количество загрузок:

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

#180 badisoft

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

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

Отправлено 17 December 2013 - 01:09 PM

Спонсор addons kotaa попросил упомянуть, что это именно он заплатил 500руб за этот addons.

Addons:

1. если хотим, чтобы строка поиска выделялась "жирным и красным" не только при вводе одного слова, но и при множественном вводе (см. cpu.badisoft.ru, введите в поиске "tb-4 tex"), то в список параметров при инициализации автокомплита добавляем параметр highlight:
....
formatItem:liFormat,
extraParams: {cID:{/literal}{$current_currency}{literal}},
highlight: function(value, term) {
var aterm = term.trim().split(' ');
for (var key in aterm)
   value = value.replace(new RegExp("(?![^&;]+<img src='http://vsupport.club/public/style_emoticons/<#EMO_DIR#>/wink.png' class='bbc_emoticon' alt=';)' />(?!<[^<>]*)(" + aterm[key].replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+<img src='http://vsupport.club/public/style_emoticons/<#EMO_DIR#>/wink.png' class='bbc_emoticon' alt=';)' />", "gi"), "<strong style='color:red'>$1</strong>");
return value;
}

2. Если хотим, чтобы поиск производился ТОЛЬКО в код+название, а не в код+название+краткое+полное, то в autocomplete.php заменяем

$filter .= "(LOWER(name) LIKE '%".xToText(trim(strtolower($word)))."%' OR ".
"LOWER(description) LIKE '%".xEscSQL(trim(strtolower($word)))."%' OR ".
"LOWER(product_code) LIKE '%".xEscSQL(trim(strtolower($word)))."%' OR ".
"LOWER(brief_description) LIKE '%".xEscSQL(trim(strtolower($word)))."%') AND ";


на


$filter .= "(LOWER(name) LIKE '%".xToText(trim(strtolower($word)))."%' OR ".
"LOWER(product_code) LIKE '%".xEscSQL(trim(strtolower($word)))."%') AND ";


аналогичным образом и в файле product_function.php в функции prdSearchProductByTemplate, чтобы критерии поиска у живого фильтра и обычного поиска совпадали.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)