Exile
Администратор
Где оно тут стабильное, кстати? Инсталл как минимум не полный.
Вот мой вариант. Изменения минимальные, но вдруг.
Для начала подключаем библиотеку jquery-ui на все страницы форума. У многих уже может быть подключена для модов в стиле всплывающего профиля пользователя.
ajax.php
Подключаем файл обработчика и все такое:
getSearchHint.php
Основной файл обработчик. Кеширует запросы чтобы совсем уж сильно не грузить.
tracker.php
Вносим данные в таблицу запросов. Перед print_page('tracker.tpl'); вставляем:
page_header.tpl
После подключения скрипта <script type="text/javascript" src="{STATIC_URL}/js/bbcode.js?v={$bb_cfg['js_ver']}"></script> (у меня свои пути, ищите по имени файла) вставляем:
tracker.tpl
Вставляем после <!-- ENDIF / AJAX_TOPICS -->:
Структура таблицы search_hint:
Собственно вроде все. У кого есть вопросы - задавайте.
Подумаем над рациональностью впиливания данного чуда в движок. Не исключено что будет "из коробки".
Вот мой вариант. Изменения минимальные, но вдруг.
Для начала подключаем библиотеку jquery-ui на все страницы форума. У многих уже может быть подключена для модов в стиле всплывающего профиля пользователя.
ajax.php
Подключаем файл обработчика и все такое:
PHP:
'getSearchHint' => array('user'),
PHP:
function getSearchHint ()
{
require(AJAX_DIR . 'getSearchHint.php');
}
getSearchHint.php
Основной файл обработчик. Кеширует запросы чтобы совсем уж сильно не грузить.
PHP:
<?php
if (!defined('IN_AJAX')) die(basename(__FILE__));
$otvet = CACHE('bb_cache')->get('hint_'.md5($this->request['term']));
if ($otvet != '')
{
$this->response['data'] = json_decode($otvet);
}
else
{
$sql = "SELECT * FROM search_hint WHERE query LIKE '%".DB()->escape($this->request['term'])."%' ORDER BY hit DESC LIMIT 8";
$result = DB()->sql_query($sql);
while ($row = DB()->sql_fetchrow($result))
{
$otvet[] = $row['query'];
}
CACHE('bb_cache')->set('hint_'.md5($this->request['term']), json_encode($otvet), 300);
$this->response['data'] = $otvet;
}
tracker.php
Вносим данные в таблицу запросов. Перед print_page('tracker.tpl'); вставляем:
PHP:
if (!empty($_REQUEST['nm']) && !empty($results))
{
// поисковые подсказки
DB()->sql_query("INSERT INTO search_hint (query, hit) VALUES ('".DB()->escape($_REQUEST['nm'])."', 1) ON DUPLICATE KEY UPDATE hit = hit + 1");
}
page_header.tpl
После подключения скрипта <script type="text/javascript" src="{STATIC_URL}/js/bbcode.js?v={$bb_cfg['js_ver']}"></script> (у меня свои пути, ищите по имени файла) вставляем:
HTML:
<script type="text/javascript">
$(function() {
$("#search-text").autocomplete({
source:function( request, response ) {
$.ajax({
url: "ajax.php",
success: function(answer) {
var data = eval ("(" + answer + ")");
response(data.data);
},
type: "POST",
data: "action=getSearchHint&term="+request.term
});
},
minLength: 2
});
});
</script>
tracker.tpl
Вставляем после <!-- ENDIF / AJAX_TOPICS -->:
HTML:
<script type="text/javascript">
$(function() {
$("#post").autocomplete({
source:function( request, response ) {
$.ajax({
url: "ajax.php",
success: function(answer) {
var data = eval ("(" + answer + ")");
response(data.data);
},
type: "POST",
data: "action=getSearchHint&term="+request.term
});
},
minLength: 2
});
});
</script>
Структура таблицы search_hint:
PHP:
CREATE TABLE IF NOT EXISTS `search_hint` (
`query` varchar(250) NOT NULL,
`hit` int(11) NOT NULL,
UNIQUE KEY `hint` (`query`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Собственно вроде все. У кого есть вопросы - задавайте.
Подумаем над рациональностью впиливания данного чуда в движок. Не исключено что будет "из коробки".