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


Модуль "живой поиск"


  • Закрытая тема Тема закрыта
Сообщений в теме: 57

#21 makki

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

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

Отправлено 19 December 2011 - 09:48 AM

Спасибо за тему. "Живой поиск" - нужная вещь. Все работает. Но хотелось бы чтобы кроме названия в выпадающем списке была миниатюра с изображением товара и цена. Подскажите пожалуйста как это сделать?

Пример такого поиска тут
  • 0

#22 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 19 December 2011 - 11:32 AM

Спасибо за тему. "Живой поиск" - нужная вещь. Все работает. Но хотелось бы чтобы кроме названия в выпадающем списке была миниатюра с изображением товара и цена. Подскажите пожалуйста как это сделать?


нужно в файле devsearch.php
код

$data = mysql_query("SELECT * from ".PRODUCTS_TABLE." where name like '%$q%' AND enabled = '1' or product_code LIKE '$q' order by productID" )
or die( db_error() );
while( $row = mysql_fetch_array( $data )){
if ( strpos( strtolower( $row['name'] ), $q ) !== false ) {
echo $row['name'] . "\n";
}
}


заменить на

if (!$q) return;
$data = mysql_query("SELECT * from ".PRODUCTS_TABLE." INNER JOIN ".PRODUCT_PICTURES." using(productID) where name like '%$q%' AND enabled = '1' or product_code LIKE '$q' order by productID" )
or die( db_error() );
while( $row = mysql_fetch_array( $data )){
if ( strpos( strtolower( $row['name'] ), $q ) !== false ) {
echo '<img width="50px" src="/data/small/'.$row['filename'].'">'.$row['name'] . "\n";
}
}


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

хотя нет... фотку то оно выведет но потом вставляет ее кодом в поисковую строку ((

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

сейчас занят.... позже разберусь - самому интересно
  • 0

#23 vsupport

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

  • Администраторы
  • 758 сообщений
Репутация: 31
Ассистент

Отправлено 19 December 2011 - 09:06 PM

Кто то реализовывал данную версию под ShopCMS 3.0.x???
  • 0

#24 Dbus

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

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

Отправлено 19 December 2011 - 09:21 PM

Кто то реализовывал данную версию под ShopCMS 3.0.x???

да, мой 1й вариант как раз под 3.0 (R2 даже) и работал. Там вроде ничего менять не нужно в запросе, структура не поменялась.
  • 0
502 Bad Gateway

#25 makki

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

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

Отправлено 20 December 2011 - 05:41 PM

У меня в Инет Экспрорере не пашет. В остальных работает.Не пойму что не так.
  • 0

#26 badisoft

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

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

Отправлено 20 December 2011 - 07:35 PM

да, мой 1й вариант как раз под 3.0 (R2 даже) и работал. Там вроде ничего менять не нужно в запросе, структура не поменялась.

Я в Вашем варианте заменил "прямой доступ" на функции из mysql.php, оно как-то идеологически правильнее. Хотя, конечно, при полном отстутствии других интерфейсов (к другим ля-ля-SQL) разницы никакой :).

У меня в Инет Экспрорере не пашет. В остальных работает.Не пойму что не так.

У меня как раз в Эксплорере оно и работает. Так уж сложилось, что основной браузер. И дома, и на работе.

В общем, вот "мой" вариант. Т.е. калька с предыдущих с моими мелкими изменениями:
1. devsearch.php, лежит в корне. Это неправильно, но пока лежит там :).
<?php
header("Content-Type: text/html;charset=windows-1251");
include("core/config/connect.inc.php");
include("core/includes/database/".DBMS.".php");

# нижеследующий iconv нужен если на:
# mysql> SHOW VARIABLES LIKE 'character_set_system';
# будет ответ
# character_set_system | utf8 |
# иначе просто закомментаренный вариант (и разбирайтесь сами :)).

$q = iconv('UTF8','CP1251',strtolower($_GET["q"]));
#$q = strtolower($_GET["q"]);

db_connect(DB_HOST,DB_USER,DB_PASS) or die (db_error());
db_select_db(DB_NAME) or die (db_error());
$data = mysql_query("SELECT name from ".DB_PRFX."products where name like '%$q%' AND enabled = '1'" )
or die( db_error() );
db_disconnect();

while( $row = mysql_fetch_array( $data )){
echo $row['name']."\n";
}
?>

2. Цитата: "А в index.tpl.html заменил только class="pform" на id="targetDiv", оно там один раз встречается."

3. Цитата из исходного архива, вставил тупо, т.к. пока не понимаю: //В head.tpl.html
<!-- Autocomplete Formatting -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js" type="text/javascript"></script>
<script type='text/javascript' src='front/user/js/jquery.autocomplete.pack.js'></script>
<link rel="stylesheet" type="text/css" href="front/user/css/jquery.autocomplete.css" />
{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}


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

#27 Dbus

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

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

Отправлено 21 December 2011 - 01:41 AM

С картинкой и ценой... R.Sergey чуть выше верно начал насчет запроса, только я бы поля перечислил, зачем по всему сразу выборку делать...
ниже исправляем
while( $row = mysql_fetch_array( $data )){echo $row[name]."|".$row[product_code]."|".show_price($row[Price],5)."|".$row[filename]."\n";} 

(вместо цифры 5 подберите свою в зависимости от валюты, вывод в которой нужен)

в js в функции автокомплита дописываем formatItem:liFormat,
и рядом добавляем еще одну функцию с желаемым форматированием, я сделал так
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;
}

Вроде ничего не упустил...
Свой код полностью не привожу, чтобы не запутать (он отличается переменными и по мелочам еще), но кому нужно, разберется :)
  • 0
502 Bad Gateway

#28 xumuk533

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

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

Отправлено 21 December 2011 - 04:10 PM

это типо как на розетке?
  • 0

#29 Dbus

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

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

Отправлено 21 December 2011 - 04:12 PM

это типо как на розетке?


В финальном варианте - типо да.
  • 0
502 Bad Gateway

#30 makki

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

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

Отправлено 22 December 2011 - 04:04 PM

.
Свой код полностью не привожу, чтобы не запутать (он отличается переменными и по мелочам еще), но кому нужно, разберется :)


Два часа убил. Ничего не получается с выводом в результатах поиска с изображением и ценой. И вообще у меня только такой вариант devsearch работает правильно
<?php
header('Content-type: text/html; charset=utf8'); 
$q = iconv('UTF-8', 'windows-1251', $_GET['q']); 
include("core/config/connect.inc.php");
include("core/includes/database/".DBMS.".php");
db_connect(DB_HOST,DB_USER,DB_PASS) or die (db_error());
db_select_db(DB_NAME) or die (db_error());
$q = strtolower( $_GET["q"] );
$_GET['q'] = str_replace('\\', '\\\\', $_GET['q']);
$q = addCslashes($_GET['q'], '_%');
$q = mysql_real_escape_string ($q);
if (!$q) return;
mysql_query('set character set utf8'); 
mysql_query('set character_set_connection=utf8'); 
$query = "SELECT name, product_code FROM ".DB_PRFX."products WHERE (enabled = 1 AND (name LIKE '%$q%' OR product_code LIKE '%$q%')) LIMIT 25"; 
$result = mysql_query($query); 
$output_items = array(); 
while($row = mysql_fetch_array($result)){ 
$output_items[] = $row['name']; 
} 
print(implode("\n", $output_items)); 
mysql_close($con); 
?>

Также непонятно где devsearch.php хранить. У меня он лежит в корне, но это как я понимаю неправильно.
  • 0

#31 Dbus

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

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

Отправлено 22 December 2011 - 04:22 PM

а, блин, там же ж format_price еще...

добавьте вверху require('core/functions/functions.php');
или include.
  • 0
502 Bad Gateway

#32 badisoft

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

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

Отправлено 22 December 2011 - 07:57 PM

$_GET['q'] = str_replace('\\', '\\\\', $_GET['q']);
$q = addCslashes($_GET['q'], '_%');
$q = mysql_real_escape_string ($q);

Вот кто бы объяснил, зачем нужно применение этих функций в этом модуле.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#33 Dbus

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

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

Отправлено 22 December 2011 - 08:17 PM

Гугл не спрашивали ? Он много чего знает...

PHP: str_replace - Manual
Функция addcslashes. Справочник функций PHP.
PHP.SU - mysql_real_escape_string()
  • 0
502 Bad Gateway

#34 badisoft

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

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

Отправлено 22 December 2011 - 08:32 PM

Гугл не спрашивали ? Он много чего знает...

Хм... Видимо, я спросил какую-то херню? Иначе зачем бы мне давать пучок ссылок на описание известнейших функций, когда я спрашивал "зачем нужно применение этих функций в ЭТОМ модуле".

В принципе, меня вполне удовлетворит ответ: "Да, действительно надо менять двойные слэши на четверные и делать прочие замены еще двумя функциями для получения правильной выборки из SQL-базы". Но таки было бы интересно - а занахуа? Я пока причин для использования этих трех функций не вижу. Но тот, кто их вписал явно видел. Отсюда и возник вопрос. Вот странно, да? :)

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

#35 Dbus

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

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

Отправлено 22 December 2011 - 08:49 PM

Тогда я не так понял вопрос :)
имхо, там смысл имеет только mysql_real_escape_string, для защиты от иньекций. Остальное хз зачем.

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

у меня в коде подключена core/functions/functions.php, и строка обработки запроса одна и выглядит так
$q = xEscSQL(trim(strtolower($_GET['q']))); Всё.
  • 0
502 Bad Gateway

#36 badisoft

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

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

Отправлено 22 December 2011 - 08:52 PM

у меня в коде подключена core/functions/functions.php, и строка обработки запроса одна и выглядит так
$q = xEscSQL(trim(strtolower($_GET['q']))); Всё.


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

#37 makki

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

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

Отправлено 24 December 2011 - 04:22 PM

Учел все рекомендации, картинка и цена выводится, но Internet Explorer упорно не хочет работать. Вообще не появляется выпадающий список товаров. Не пойму в чем может быть дело?
  • 0

#38 Dbus

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

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

Отправлено 24 December 2011 - 10:28 PM

Учел все рекомендации, картинка и цена выводится, но Internet Explorer упорно не хочет работать. Вообще не появляется выпадающий список товаров. Не пойму в чем может быть дело?


проверьте css
  • 0
502 Bad Gateway

#39 badisoft

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

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

Отправлено 18 January 2012 - 07:38 AM

Интересные грабельки нашел, доселе не знакомые. После какого-то очередного редактирования файла devsearch.php (скорее всего, FAR-ом) русские буковки в выпадающем списке снова стали отображаться квадратиками, как будто нет строки header("Content-Type: text/html;charset=windows-1251").
Полез в логи и вижу, что "PHP Warning: Cannot modify header information - headers already sent by..." Яндекс сообщил, что этой ошибке часто соответствует ситуация, когда ".
Особенно если в файле ни одного UTF-8 символа.
Похоже, это FAR постарался.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#40 Dbus

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

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

Отправлено 18 January 2012 - 10:18 AM

Сорри за оффтоп, а зачем вообще пользоваться FAR-ом ? в RapidPHP есть встроенный фтп менеджер, да и сам софт стоит сейчас 30 грн (106 рублей), я недавно писал в какой-то ветке...
  • 0
502 Bad Gateway