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


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


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

#1 badisoft

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

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

Отправлено 31 January 2012 - 07:54 PM

Давно сделал и, вроде, работает. Решил выложить для всех. Спасибо DBus, R.Sergey и остальным, участвовавшим в той теме, кого я уже не помню.

update: чуть переделал. Теперь поиск идет по словам, разделенным пробелом (пробелами). Т.е. в выборку попадают товары, в названии которых присутствуют ВСЕ слова (наборы букв-цифр-знаков), которые набраны в строке поиска. Другими словами, если есть товар "супердрель Bosh wgs-123", то он попадет в выборку и при наборе строки поиска "дрель bosch", и при наборе "bos дрель", и при "bosch супер".

1.В core/tpl/user/[свой шаблон]/head.tpl.html после строки
{* подключение скриптов *}
вставить:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js" type="text/javascript"></script>
<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) {
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;
}
	  
$("#targetDiv").autocomplete("devsearch.php", {
max: 30,
highlight: false,
scroll: true,
scrollHeight: 600,
width:250,
formatItem:liFormat
});
				
$("#targetDiv").result(function () {
$('#formpoisk').submit();
});
});
</script>
{/literal}
возможно, библиотека JQUERY у вас уже есть (поставлена с каким-либо другим модулем),
тогда строку с jquery.min.js надо исключить. Но! Имеющаяся строка с jquery.min.js
должна быть выше по тексту, чем строка с jquery.autocomplete.pack.js


2.В core/tpl/user/[свой шаблон]/index.tpl.html
строку:
<input type="text" name="searchstring" class="pform" value="{$searchstring}"></td>
заменить на:
<input type="text" name="searchstring" id="targetDiv" value="{$searchstring}"></td>

3. файлы

jquery.autocomplete.css
jquery.autocomplete.pack.js
jquery.easing.1.3.js

переписать в каталог data/[свой шаблон]
например, это может быть data/default

4. файл devsearch.php переписать в корень сайта

devsearch.php:


<?php
header("Content-Type: text/html;charset=windows-1251");
require_once "core/config/connect.inc.php";
require_once "core/includes/database/".DBMS.".php";
require_once "core/functions/functions.php";

db_connect(DB_HOST,DB_USER,DB_PASS) or die (db_error());
db_select_db(DB_NAME) or die (db_error());
$q = xEscSQL (iconv('UTF-8','CP1251',$_GET["q"]));

$filter = "";
foreach (explode(" ",$q) as $word)
$filter .= "t1.name like '%$word%' AND ";

$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() );
while( $row = db_fetch_assoc( $data ))
{echo html_entity_decode ($row['name'],ENT_QUOTES)."|".$row['name']."|".show_price($row['price'],1)." / ".show_price($row['price'],2)."|".($row['filename']?'/data/small/'.$row['filename']:'/data/empty.gif')."\n";}
db_disconnect();
?>


5.1. header("Content-Type: text/html;charset=windows-1251") соответствует кодировке сайта win1251. Так по умолчанию, так обычно и есть, но не всегда. Правильность видна по наличию читаемых названий товаров в выпадающем списке, а не квадратиков или вопросиков .

5.2. iconv('UTF-8','CP1251',$_GET["q"]) надо тогда, когда локаль вашего сервера (VPS, хостинга) UTF8, а данные в SQL-базе хранятся в win1251. Обычно так и есть, но тоже вовсе не всегда и не у всех. Правильность видна по тому, находится хоть что-нибудь или нет, если искать заведомо имеющийся товар.

6. скачать весь архив можно тут - скачать модуль "Живой поиск (с картинками)"
  • 3
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 Dbus

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

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

Отправлено 31 January 2012 - 08:59 PM

jquery можно и посвежее, 1.4 какбы не актуально давно.
  • 0
502 Bad Gateway

#3 badisoft

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

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

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

jquery можно и посвежее, 1.4 какбы не актуально давно.

Можно, но уж какое подвернулось. Из твоего примера, кстати, насколько я помню :).
Да и смысл? Более позднее будет явно бОльшего объема, что минус и ни единого плюса.

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

-rw-r--r-- 1 root root 70843 Янв 31 23:33 jquery.min.js
-rw-r--r-- 1 root root 85925 Янв 31 23:33 jquery.min.js.1
-rw-r--r-- 1 root root 91668 Янв 31 23:33 jquery.min.js.2
-rw-r--r-- 1 root root 93868 Янв 31 23:33 jquery.min.js.3
Это 1.4.1, 1.5, 1.6 и 1.7 соответственно :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 Dbus

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

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

Отправлено 31 January 2012 - 10:01 PM

Можно, но уж какое подвернулось. Из твоего примера, кстати, насколько я помню .

нене, не может такого быть :) у меня 1.6 ветка давно.

смысл CDN в том, что скрипт может УЖЕ быть в кеше браузера и не подтягиваться отдельно. а более актуальные версии я надеюсь, и встречаются чаще.
  • 0
502 Bad Gateway

#5 badisoft

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

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

Отправлено 31 January 2012 - 10:13 PM

нене, не может такого быть :) у меня 1.6 ветка давно.

Да, это был mealeks

смысл CDN в том, что скрипт может УЖЕ быть в кеше браузера и не подтягиваться отдельно. а более актуальные версии я надеюсь, и встречаются чаще.

Как я понимаю, если jquery УЖЕ в кэше браузера, значит есть еще один какой-то скрипт, пользующий jquery и, скорее всего, по любому придется их выравнивать по версии, иначе будут конфликтовать по функциям. Нет?
Но это уж пусть пользователи проверяют и пробуют.
Новее-то оно новее, но с этой версией уже проверено.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 Dbus

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

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

Отправлено 31 January 2012 - 10:23 PM

Новее-то оно новее, но с этой версией уже проверено.

не факт. помницца ты писал что более новая версия автокомплита не работала, как раз из-за версии jq такое может быть, я не обратил внимания тогда..

Как я понимаю, если jquery УЖЕ в кэше браузера, значит есть еще один какой-то скрипт, пользующий jquery

дело не в jquery, а в самом файле, на который ссылаются, неважно что это и какой версии - если он уже скачан (с другого сайта, есть в кеше) то перекачиваться не будет - в этом весь прикол CDN
  • 0
502 Bad Gateway

#7 badisoft

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

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

Отправлено 01 February 2012 - 12:23 AM

помницца ты писал что более новая версия автокомплита не работала, как раз из-за версии jq такое может быть, я не обратил внимания тогда..

Она не неработала, а глючила. Точнее, работала не так, как ожидалось судя по описанию. Но вот как раз версия jquery там была новее, т.к. и исходник был другой :).

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

дело не в jquery, а в самом файле, на который ссылаются, неважно что это и какой версии - если он уже скачан (с другого сайта, есть в кеше) то перекачиваться не будет - в этом весь прикол CDN

Это понятно. Я, видимо, невнятно выражаю свои мысли. Если в кэше УЖЕ лежит какая-то версия jquery (от другого скрипта из другого места HTML), то для этого скрипта по любому, как мне кажется, придется прописывать ту же самую версию, иначе два набора одноименных функций jquery будут c большой вероятностью конфликтовать. Т.е. вопрос уже не в том, что более новая версия jquery будет лучше, а что придется ставить одну версию вне зависимости от того, лучше новая или хуже.
Ну, или для второго скрипта прописывать старую версию, если он с ней заработает. Которая меньше размером. Хотя, конечно, на фоне стандартной стартовой страницы ShopCMS в пару-тройку сотен килобайт размером вся эта экономия двадцати килобайт смешна :).

Или ты о том, что оно вообще в общем кэше браузера уже неделю как лежать может?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 Dbus

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

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

Отправлено 01 February 2012 - 12:43 AM

Или ты о том, что оно вообще в общем кэше браузера уже неделю как лежать может?

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

#9 badisoft

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

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

Отправлено 01 February 2012 - 06:26 PM

jquery можно и посвежее, 1.4 какбы не актуально давно.

Я проверил с 1.7 - не увидел отличий в работе. Т.е. работает. Думаю, с 1.5 и 1.6 аналогично.
Так что любой может вписать в своем варианте желаемую версию :).

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

этот файл стоит 2 ящика пива!

R244741725479 <- сюда можно засылать ящики пива.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#10 AVATARA

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

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

Отправлено 09 February 2012 - 12:47 AM

Прикрепленный файл  76574576457.jpg   202.79К   55 Количество загрузок:
при любом запросе выпадают подряд все товары начиная с самых первых, думал проблема в совместимости с другими доработками, скачал чистый ShopCMS PS 3.1.2 – Портативный сервер - на нем то же самое
  • 0

#11 badisoft

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

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

Отправлено 09 February 2012 - 02:32 AM

при любом запросе выпадают подряд все товары начиная с самых первых, думал проблема в совместимости с другими доработками,

Думаю, что проблема в совместимости кодировок. Попробуйте убрать iconv из devsearch.php.
То, как там написано сделано для ситуации (моей), когда сервер имеет локаль UTF-8, а SQL-база в win-1251.
Если посмотреть в лог SQL-запросов, то там, наверняка, от devsearch.php будет запрос типа select ... like '%%', т.к. $q после применения iconv пустое.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 dgimmibos

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

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

Отправлено 09 February 2012 - 07:31 AM

Убрал //$q = xEscSQL (iconv('UTF8','CP1251',$_GET["q"]));
все равно выпадает все по порядку и плюс почему то в валюте цены.
  • 0

#13 AVATARA

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

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

Отправлено 09 February 2012 - 09:15 AM

Убрал //$q = xEscSQL (iconv('UTF8','CP1251',$_GET["q"]));
все равно выпадает все по порядку и плюс почему то в валюте цены.

замени эту строку на $q = xEscSQL ($_GET["q"]);

Попробуйте убрать iconv из devsearch.php.

помогло, хотя серв тоже utf8 а таблицы в 1251

теперь другой баг - оно ищет еще и по названиям файлов и выбивает каждую картинку как отдельный товар

и еще как вырубить автовыбор товара под мышкой?

Прикрепленный файл  4356346.jpg   31.99К   13 Количество загрузок:
  • 0

#14 dgimmibos

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

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

Отправлено 09 February 2012 - 09:25 AM

Поиск заработал но,
поиск осуществляется только на анг.. языке( и с модулем поиска цен с ползунами не работает.
  • 0

#15 badisoft

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

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

Отправлено 09 February 2012 - 12:12 PM

Убрал //$q = xEscSQL (iconv('UTF8','CP1251',$_GET["q"]));
все равно выпадает все по порядку

Убирать надо iconv, а не всю строчку :).
Те вместо закомментированной строки надо вставить $q = xEscSQL ($_GET["q"]);
Иначе откуда же select возьмет переменную $q, которая образец для поиска?

и плюс почему то в валюте цены.

Увы, я пока не понял, как из devsearch.php красиво (!) получить номер текущей используемой валюты.
Поэтому используется "валюта 1" (свою цифру подставить по вкусу).
show_price($row['price'],1) - вот тут единичка это номер валюты и есть.
У меня валюта одна, мне это не актуально. Так что либо попробуйте решить проблему сами, либо ждите, пока я разберусь.

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

теперь другой баг - оно ищет еще и по названиям файлов и выбивает каждую картинку как отдельный товар

Это моя ошибка. Я не заметил, что в общем случае картинок может быть несколько у одного товара.
Надо поправить select в devsearch.php, чтобы выбирал только одну. Скажем, первую.
вечером поправлю или поправьте сами.

и еще как вырубить автовыбор товара под мышкой?

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

#16 AVATARA

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

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

Отправлено 09 February 2012 - 12:22 PM

вечером поправлю или поправьте сами

поправь плиз бо я не шарю ))

описание применяемых jquery-функций

попробовал, но что-то не получилось вырубить... надо поковырять еще
/// тьфу туплю, он выбирает энтером то что выделено, если мышей нажать кнопку поиска то норм
  • 0

#17 dgimmibos

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

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

Отправлено 09 February 2012 - 12:51 PM

Спасибо еще такой вопрос, выводится с дополнительным окном, как сделать css что бы нормально выводилось?

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

  • Прикрепленный файл  search.png   28.45К   17 Количество загрузок:

  • 0

#18 badisoft

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

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

Отправлено 09 February 2012 - 01:45 PM

и с модулем поиска цен с ползунами не работает

А Вы оба модуля полностью целиком ставили, ровно как написано?
Если да, тогда то у вас две ссылки на jquery, одна из них лишняя.
Оба модуля используют эту библиотеку и, естественно, в описании инсталляции обоих она присутствует.
Причем еще и разных версий, насколько я помню.
Возможно, несовместимость из-за этого.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#19 dgimmibos

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

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

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

Да с jquery разобрался, вот с css не пойму почему дополнительно выводится еще одна рамка, и ищет только на английском? Фома поиска у меня другая может из за этого

<form action="index.php" method="get" name="formpoisk" id="formpoisk">
			    <fieldset>
				    <div class="clear">
					    <div class="search-right"><span class="input-left-side"></span><input type="text" name="searchstring" id="targetDiv" value="{$searchstring}" />
	 
				    </div>
				    <div class="clear">
					    <div class="search-left">&nbsp;</div>
				    </div>
			    </fieldset>
		    </form>

  • 0

#20 badisoft

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

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

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

поправь плиз бо я не шарю ))

В devsearch.php замените 't1.productID = t2.productID' на 't1.default_picture = t2.photoID'

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

Фома поиска у меня друга может из за этого

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