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. скачать весь архив можно тут - скачать модуль "Живой поиск (с картинками)"