Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.

Форум Модули DIAFAN.CMS Поиск по сайту Готовый скрипт живого поиска


Андрей (R4W) 5418 декабря 2013 г.

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

Вот отсюда можете выдрать JS и корректно применить в своей вьюхе поиска
Код


<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="asdfasdf" />
<title>
Untitled 3

Показать весь код
</title>

<style>
ul {background: #EEE;}
</style>

</head>
<body>
<script type="text/javascript" src="http://yandex.st/jquery/1.7.1/jquery.min.js">
</script>
<script>

function suggest(inputString){
if(inputString.length == 0) {
$('#suggestions').fadeOut();
} else if(inputString.length >= 2) {
$.ajax({
url: "autosuggest.php",
data: 'act=autoSuggestUser&queryString='+inputString,
success: function(msg){
if(msg.length >0) {
$('#suggestions').fadeIn();
$('#suggestionsList').html(msg);
$('#country').removeClass('load');
}
}
});
}
}
function fill(thisValue) {
$('.input_search').val(thisValue);
setTimeout("$('#suggestions').fadeOut();", 600);
}
function fillId(thisValue) {
$('#country_id').val(thisValue);
setTimeout("$('#suggestions').fadeOut();", 600);
}


</script>
<div id="suggest">
Start to type a country:
<br />
<input type="text" size="25" value="" class="input_search" onkeyup="suggest(this.value);" />

<div id="suggestions" style="display: none;">
<div id="suggestionsList">
&nbsp;
</div>
</div>
</div>
</body>

</html>




а вот файл autosuggest.php, который шерстит базу.
Умный вещей типа подключения классов и т.п. я не умею, поэтому сделал достаточно примитивно, но как умею

Код


<?php

if (isset($_REQUEST['act']) && $_REQUEST['act'] == 'autoSuggestUser' && isset($_REQUEST['queryString']))
{

$db_host = '';
$db_user = '';
$db_password = '';

Показать весь код
$db_name = '';
$site_url ='';

$connect = mysql_connect($db_host, $db_user, $db_password);
$db = mysql_select_db($db_name, $connect);



if ($db)
{
$string = '';
$queryString = $_REQUEST['queryString'];
$queryString = iconv("UTF-8","windows-1251", $queryString);

$query = "SELECT * FROM `diafan_shop` WHERE `name1` like \"%".$queryString."%\" ";#CONVERT(`id` USING utf8)
$query_article = "SELECT * FROM `diafan_shop` WHERE `article` like \"".$queryString."%\" ";#CONVERT(`id` USING utf8)
$query_category = "SELECT * FROM `diafan_shop_category` WHERE `name1` like \"%".$queryString."%\" ";

$resource = mysql_query($query);
$resource_article = mysql_query($query_article);
$resource_category = mysql_query($query_category);

//Ищем артикул
if ($resource_article && mysql_num_rows($resource_article) > 0)
{
$string = '<ul>';
while ($result = mysql_fetch_object($resource_article))
{
$id_query = $result->id;
$sef_result = mysql_fetch_object(mysql_query("SELECT * FROM `diafan_rewrite` WHERE `element_id` = '$id_query' AND `trash` = '0'"));
$sef_url = ($site_url . $sef_result->rewrite);

$string .= "<li><a href=$sef_url>$result->name1</a></li>";
}
$string .= '</ul>';
$string = iconv("windows-1251","UTF-8", $string);
echo "Товары найденные по артикулу:";
echo $string;

}
//Ищем категорию
if ($resource_category && mysql_num_rows($resource_category) > 0)
{
$string = '<ul>';
while ($result = mysql_fetch_object($resource_category))
{
$id_query = $result->id;
$sef_result = mysql_fetch_object(mysql_query("SELECT * FROM `diafan_rewrite` WHERE `cat_id` = '$id_query' AND `trash` = '0'"));
$sef_url = ($site_url . $sef_result->rewrite);

$string .= "<li><a href=$sef_url>$result->name1</a></li>";
}
$string .= '</ul>';
$string = iconv("windows-1251","UTF-8", $string);
echo "Найденные категории:";
echo $string;
}


//Ищем товар
if ($resource && mysql_num_rows($resource) > 0)
{
$string = '<ul>';
while ($result = mysql_fetch_object($resource))
{
$id_query = $result->id;
$sef_result = mysql_fetch_object(mysql_query("SELECT * FROM `diafan_rewrite` WHERE `element_id` = '$id_query' AND `trash` = '0'"));
$sef_url = ($site_url . $sef_result->rewrite);

$string .= "<li><a href=$sef_url>$result->name1</a></li>";
}
$string .= '</ul>';
$string = iconv("windows-1251","UTF-8", $string);
echo "Найденные категории:";
echo $string;
} else
{
$string .= '<li>Ничего не найдено</li>';
}

exit;

}
exit;
}

?>



Обратите внимание на функцию iconv - это я из UTF в win1251 гоняю и обратно. Не знаю почему у меня база в 1251, а показывает что UTF.
буду раз если совместно улучшим.

Сергей (intorg) 17 марта 2014 г.

тему кто нибудь читал?

Александр Биг Эпл (ba5) 8313 мая 2014 г.

Пригодится. спс, добавлю в закладки

Алексей (Nip4Fun) 817 октября 2014 г.

скажите как правельно его к диафану в вив засунуть, привидите свой вив если не трудно.

Андрей (R4W) 5420 октября 2014 г.

Что такое "вив"?

Горопашный Степан (stepanych) 3920 октября 2014 г.

видимо "view" )

Алексей (Nip4Fun) 822 октября 2014 г.

именно) дайте пример файла search.view.show_search_top.php или пример тех фалов которые нужно изменить, не как не могу разобраться с привязкой своих скриптов к диафану а также куда засунуть файл autosuggest.php или что с ним нужно сделать, помогите пожайлусто

Андрей (R4W) 5422 октября 2014 г.

autosuggest.php кладите куда угодно, главное путь до него правильно прописывайте в скрипте. Можно полный путь вместе с доменом сайта чтобы наверняка.

А форму я выводил даже не вьюхой а просто вручную в шаблоне. Просто скопировал тот код, который шаблонный тег генерит и подправил чуток. Добавил onkeyup="suggest(this.value);" и div куда результаты добавляются.

Алексей (Nip4Fun) 823 октября 2014 г., редакция 23 октября 2014 г.

попытался, но без успешно( можете выложить часть этого кода из шаблона?

Андрей (R4W) 5424 октября 2014 г.

Кто бы помог переписать переписать php часть по взрослому, с подключением основного класса диафан и использованием уже функций диафана по работе с БД?

Данияр (doni2000) 25 октября 2014 г., редакция 25 октября 2014 г.

Ваш же скрипт. Только сделано все грамотно.
Вот часть кода.
Код

$category = DB::query_fetch_all("SELECT id, [name], site_id FROM {shop_category} WHERE [name] LIKE '%%".$this->diafan->filter($_REQUEST, 'sql', "searchword")."%%'");
if(count($category)){
$this->result['list']['category']['name'] = 'Найденные категории:';
$this->result['list']['category']['text'] = '<ul>';
foreach ($category as $rows){
$this->result['list']['category']['text'] .= '<li><a href="'.BASE_PATH_HREF.$this->diafan->_route->link($rows["site_id"], $rows["id"], "shop","cat").'">'.$rows['name'].'</a></li>';

}
$this->result['list']['category']['text'] .= '</ul>';

Показать весь код
}

Алексей (Nip4Fun) 826 октября 2014 г.

а можно поподробней, куда именно это вставлять?

Данияр (doni2000) 26 октября 2014 г., редакция 26 октября 2014 г.

Неужели непонятно. У меня есть модуль который сделан по всем правилам диафана. По текущему требованию. Которую можно легко установить в сайт. На это у меня ушло час. За буквально не большущую плату я могу выслать его всем желающим.

Алексей (Nip4Fun) 826 октября 2014 г.

ценна вопроса?

Сергей (darkheart) 2526 октября 2014 г.

Данияр, вы же уже выкладывали какой то модуль вчера.

Анатолий (liniapro) 4926 октября 2014 г.

то конструктор был

Данияр (doni2000) 26 октября 2014 г.

да. А это другой модуль.

Данияр (doni2000) 26 октября 2014 г.

Готов выслушать все ваши пожелание по данной модулю. Могу сделать все что угодно только если будет удобно многим.

Алексей (Nip4Fun) 826 октября 2014 г.

хотелось бы увидит вариант под поиск в верху с кнопкой найти и выпадающим списком, но первых пяти позиций, или что бы можно было задать самому. И что бы по выбору не сразу отправлял на страницу товара а впихивал в окошко инпут данный выбор.

Данияр (doni2000) 28 октября 2014 г.

Если время найду то сделаю.

Алексей (Nip4Fun) 815 ноября 2014 г.

Ну что, не было времени?)

Валерий Викторович (Sherrlok) 14423 октября 2015 г.

Данияр (doni2000) что-то в личку уж сколько дней не отвечает. Видать вообще завязал с разработками?

Владимир (russianjazz) 29 апреля 2016 г.

А может кто из форумчан помочь за деньги поиск с автозаполнением из страниц сделать? Кидайте предложение в личку antondyrdin@gmail.com пожалуйста.