Модуль "живой поиск"
#41
Отправлено 18 January 2012 - 10:48 AM
#42
Отправлено 18 January 2012 - 11:34 AM
Да просто привык я к нему за много лет. Все кнопочки знакомы, жмутся уже на автомате и быстро, подсветка синтаксиса не хуже. А еще больше привык к консольному интерфейсу и отсутствию мышки, наверное . Rapid у меня есть, купленный. Как раз по тому совету, спасибо. Но пока что-то не торкнуло, только как "просмотр HTML-кода" в Эсплорере использую. Наверное, если к нему довесить виндовый LAMP (или хотя бы виндовый PHP), то получится некое подобие визивига и оно будет удобнее ФАРа, но мне пока лень.Сорри за оффтоп, а зачем вообще пользоваться FAR-ом ? в RapidPHP есть встроенный фтп менеджер, да и сам софт стоит сейчас 30 грн (106 рублей), я недавно писал в какой-то ветке...
---------- Сообщение объединено ----------
PS. Кстати, я тут в поисках очередных граблей. Не может ли "досовский" CRLF в концах строк вместо линуксового LF влиять на исполнение ява-скрипта для этого модуля? А то у меня тут какие-то очередные расчудесные грабли .
#43
Отправлено 18 January 2012 - 11:47 AM
Замена LF на CRLF
При добавлении проекта в git-репозиторий, последний заругался на файл reset.css, взятый мной где-то на бескрайних просторах интернета: fatal: LF would be replaced by CRLF in ...
Не устроило его, что переносы строк были в Unix-формате, так как дело происходило под Windows. Очень просто конвертировать переносы строк в Windows-формат помогает текстовый редактор Notepad++: Правка>EOL конверсия>Преобразовать в WIN-формат.
Взято отсюда.
Насчет git-репозитория: хорошо, если это был один файл, но что делать, если файлов много, и они вперемешку, unix и win? Самое простое, что можно сделать - отключить проверку формата:
$ git config --global core.autocrlf false
$ git config --global core.safecrlf false
---------- Сообщение объединено ----------
PS. Кстати, я тут в поисках очередных граблей. Не может ли "досовский" CRLF в концах строк вместо линуксового LF влиять на исполнение ява-скрипта для этого модуля? А то у меня тут какие-то очередные расчудесные грабли
Я так понимаю что может.... ява скрипт выполняется же на стороне клиента и если ты по юниксом а переносы виндовые то не воспримет их - хотя разве в яве скрипт вообще играют роль переносы?
#44
Отправлено 18 January 2012 - 04:14 PM
Сижу и медитирую на кусочек кода из этого треда. Это работающий вариантЯ так понимаю что может.... ява скрипт выполняется же на стороне клиента и если ты по юниксом а переносы виндовые то не воспримет их - хотя разве в яве скрипт вообще играют роль переносы?
$("#targetDiv").result(function (event, data, formatted) { $('#formpoisk').submit();а это не работающий. всего лишь фигурная скобка перенесена на предыдущую строку, т.е. убран перевод строки и пара пробелов. Два раза проверил. Сижу в задумчивости .
$("#targetDiv").result(function (event, data, formatted) { $('#formpoisk').submit();
---------- Сообщение объединено ----------
Я тут случайно сообразил, что strtolower совершенно незачем, т.к. LIKE в SQL-запросе регистронезависим.у меня в коде подключена core/functions/functions.php, и строка обработки запроса одна и выглядит так
$q = xEscSQL(trim(strtolower($_GET['q']))); Всё.
#45
Отправлено 18 January 2012 - 04:20 PM
Сижу и медитирую на кусочек кода из этого треда. Это работающий вариант
Код:
$("#targetDiv").result(function (event, data, formatted)
{
$('#formpoisk').submit();
а это не работающий. всего лишь фигурная скобка перенесена на предыдущую строку, т.е. убран перевод строки и пара пробелов. Два раза проверил. Сижу в задумчивости .
Код:
$("#targetDiv").result(function (event, data, formatted) {
$('#formpoisk').submit();
Крайне странно... и как-то мало верится
проверь еще раз, ведь оптимизированный яваскприпт всегда идет одной строкой даже без пробелов..... так что - где-то тут не что.
#46
Отправлено 18 January 2012 - 06:46 PM
Правильно не верится . Проверил третий раз (меняем работающий вариант на "не работащий", запускаем скриптик удаления кэша, жмем F5 в эксплорере, чтобы подсосать обновленный head.ptl.html) и нате вам! Все работает. Ладно, спишем на то, что я до того делал все вручную без скриптика и мог что-то пропустить.Крайне странно... и как-то мало верится
проверь еще раз, ведь оптимизированный яваскприпт всегда идет одной строкой даже без пробелов..... так что - где-то тут не что.
Для поддержания треда. Решил я вывести в выпадающем списке не только названия, а код-название-цена (идея с картинкой мне не нравится как ресурсоемкая и бессмысленная, типа облака тэгов). Приведенный Dbus разделитель "|" отпал сразу. Почему-то конструкция
while( $row = db_fetch_assoc( $data ))выводила только product_code. Заменил на двоеточия - стало выводить нормально. Странно. Вроде, "|" никакой не спецсимвол. Но вопрос не в этом. Вот конструкция:
{echo $row[product_code]."|".$row[name]."|".show_price($row[Price])."\n";}
while( $row = db_fetch_assoc( $data ))Чего я такого упустил, в чем лоханулся, что $row[name] ни хрена не добивается пробелами до 20-ти символов, а так в выпадающем списке и выводится, как будто функции str_pad там и в помине нет или я где-то последующую функцию trim не заметил?
{echo $row[product_code]." : ".str_pad($row[name],20).": ".show_price($row[Price])."\n";}
PS. А есть возможность задать шрифт? А то от str_pad толку чуть, если не моноширинный шрифт использовать. Хотя подозреваю, что правильным решением будет делить выпадающий список на три секции и выводить в каждую свое - код, наименование, цену. Тогда вне зависимости от шрифта они будут выровняны. Но пока не знаю, как это сделать. CSS?
#47
Отправлено 18 January 2012 - 07:00 PM
#48
Отправлено 18 January 2012 - 07:21 PM
Спасибо тебе, добрый фей.форматирование задается в функции liFormat. ну и + css.
Увы, пока не в коня корм. Но я стараюсь .
#49
Отправлено 18 January 2012 - 07:32 PM
Спасибо тебе, добрый фей.
Увы, пока не в коня корм. Но я стараюсь .
Не прибедняйся
Массив выводит список переменных и по большому счету пофиг что там за разделитель, | или еще что...
А вот как все это выглядит - описывается в js в функции. процитирую себя http://vsupport.club...dpost__p__14594
и там уже таблице можно задавать стили, шрифты и тд.
---------- Сообщение объединено ----------
А насчет картинок ты зря, визуально сразу понятно тот товар или нет, а нагрузки особой я не заметил, особенно если в базе поставить лимит на выборку, 30 или 50. Больше искать все равно смысла нет.
#50
Отправлено 19 January 2012 - 08:43 AM
Я понимаю, что это банальная текстовая строка . Однако у меня все, что дальше символа "|" в выпадающем списке отсутствует, а пробелы куда-то профукиваются. Причем не все, по одному таки остается.Массив выводит список переменных и по большому счету пофиг что там за разделитель, | или еще что...
while( $row = db_fetch_assoc( $data ))
{echo $row['product_code']." : ".show_price($row['price'])." | ".$row['thumbnail']." : ".$row['name']."\n";
fwrite($f,$row['product_code']." : ".show_price($row['price'])." | ".$row['thumbnail']." : ".$row['name']."\n");}
в результате этого кода я получаю в файле
AA0020 : 6420 | 1326531288613662.jpg : Digma S602W
в выпадающем меню
AA0020 : 6420
в форме поиска после выбора этой стоки из выпадающего меню
AA0020 : 6420
явно там где-то заныкана функция форматирования, удаляющая сдвоенные пробелы и обрезающая все после |.
"в js в функции автокомплита дописываем formatItem:liFormat,А вот как все это выглядит - описывается в js в функции. процитирую себя http://vsupport.club...5.html#post6752
и там уже таблице можно задавать стили, шрифты и тд.
и рядом добавляем еще одну функцию с желаемым форматированием" - вот из этой фразы я понял только про желаемое форматирование.
"в функции автокомплита" - это куда? "рядом" - это где?
Похоже, надо что-то начальное по яве почитать.
---------- Сообщение объединено ----------
Тьфу ты йопт... "И открылось ему сокровенное...."
Ты пишешь про модуль, выложенный admin-ом, где есть liFormat, а я пляшу от выложенного тобой (?) кусочка
{literal} <script type="text/javascript"> $().ready(function() { $("#targetDiv").autocomplete("devsearch.php", { max: 25, highlight: false, scroll: true, scrollHeight: 400 }); $("#targetDiv").result(function (event, data, formatted) { $('#formpoisk').submit(); }); }); </script> {/literal}
#51
Отправлено 19 January 2012 - 09:01 PM
#52
Отправлено 20 January 2012 - 07:02 AM
Очень маловероятно. Логика абсолютно разная. В предложенном Вами варианте на каждый набор строки поиска происходит вызов devsearch.php и ява-скрипту возвращается небольшая (!) выборка, соответствующая запросу. Тем меньше, чем длиннее искомая строка. Но на каждую дописанную-удаленную буковку запрос делается снова. В варианте из соседнего треда (я там привел кусок исходника) запрос делается один раз, но по всему товарному контенту, результат передается ява-скрипту, который уже из полученного результата каждый раз отсортировывает только подходящее под строку поиска.Админ как я понимаю, просто отделил зерна от плевел и выложил в новой теме.
Там СОВСЕМ другой модуль, хотя внешне похож, конечно .
---------- Сообщение объединено ----------
autocomplete.js:явно там где-то заныкана функция форматирования, удаляющая сдвоенные пробелы и обрезающая все после |.
cellSeparator – символ, который разделяет «ячейки» в строках данных, возвращаемых сервером. (По умолчанию: «|»).
#53
Отправлено 20 January 2012 - 10:31 AM
#54
Отправлено 20 January 2012 - 10:54 AM
devsearch.php вот, он уже устоялся, а вставку в head.tpl.html я постоянно редактирую, нечего выкладывать :
<?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('UTF8','CP1251',$_GET["q"]));
$data = db_query("select t1.product_code,t1.name,t1.price,t2.filename
from ".DB_PRFX."products t1,".DB_PRFX."product_pictures t2
where t1.name like '%$q%'
and t1.productID = t2.productID
and enabled = '1'
limit 20")
# этот селект для выборки всего товара без LIKE
#$data = db_query("select t1.product_code,t1.name,t1.price,t2.filename
# from ".DB_PRFX."products t1,".DB_PRFX."product_pictures t2
# where t1.productID = t2.productID and enabled = '1'")
or die( db_error() );
while( $row = db_fetch_assoc( $data ))
{echo $row['name']."|".$row['product_code']."|".show_price($row['price'])."|".$row['filename']."\n";}
db_disconnect();
?>
И мне почему-то не удалось заставить autocomplete.js делать запрос к серверу КАЖДЫЙ раз. Даже при cacheLength:1.
в отличие от jquery.autocoplete.pack.js
#55
Отправлено 20 January 2012 - 08:37 PM
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/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[0]+"' alt='"+row[1]+"' src='/data/small/"+row[3]+"'></td><td>"+row[0]+"</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}devsearch.php я только что публиковал, он почти не отличается, но можно скачать архив со всем набором и инструкцией:
[ATTACH]298[/ATTACH]
А тут можно посмотреть, как оно выглядит.
Наберите, например, pocket и посмотрите, как выглядит результат работы модуля.
Ну чем не офигенный модуль за 15 баксов?
PS. Сцуко. Забыл таки. i и num в параметрах функции - лишние. Не нужны. Удалить. На работоспособность не влияет но "неоптимальненько".
#56
Отправлено 20 January 2012 - 09:21 PM
Прикрепленные файлы
#57
Отправлено 21 January 2012 - 05:41 PM
---------- Сообщение объединено ----------
Кстати, при использовании выложенного тут кем-то jquery.autocomplete.pack.js полностью запрос выглядит примерно так - devsearch.php?q=poisk&limit=30×tamp=1327159130257. Т.е. можно LIMIT ХХ не задавать жестко в devsearch.php, а использовать заданное в ява-скрипте max:ХХ (видимо, это укороченный вариант maxItemsToShow). А вот autocomplete.js засылает только devsearch.php?q=poisk
#58
Отправлено 13 April 2012 - 11:52 AM