<?PHP
require "./cfg/general.inc.php";
require "./cfg/connect.inc.php";
require "./functions/mysql.php";
// Соединяемся с базой данных
db_connect
(DB_HOST
,DB_USER
,DB_PASS
) or
die (db_error
());db_select_db
(DB_NAME
) or
die (db_error
());
// Количество записей результатов поиска на странице
define("SEARCH_RESULT_ON_PAGE", 5
);
echo get_html_search();
function get_search_form()
{
$html = "<form name='search' action='".$_SERVER["PHP_SELF"]."' method='GET'>[slash]n";
$html = $html."Поиск:<input value='Введите слово' name='query' onfocus=[slash]"query.value=''[slash]" size='20' maxlength='64'/>[slash]n";
$html = $html."<input type='submit' value='Искать'/>[slash]n";
$html = $html."</form>[slash]n";
return $html;
}
function get_html_search()
{
if ( !isset($_GET["query"]) or
empty($_GET["query"]) ) {
$html = "<h3>Поиск</h3>[slash]n".get_search_form();
}
else
{
// Обрезаем строку до длины, указанной в атрибуте maxlength
$search = substr( $_GET["query"], 0
, 64
); // Убираем пробелы в начале и конце строки поиска
$search = trim( $search ); // Убираем все "ненормальные" символы
$good = preg_replace("/[^\\w\\x7F-\\xFF\\s]/", " ", $search); // Сжимаем двойные пробелы
// Получаем корни искомых слов
$stemmer = new Lingua_Stem_Ru();
foreach ( $tmp as $wrd )
{
// Если слово очень короткое - не используем его в поиске
if ( strlen($wrd) < 3
) continue; $words[] = $stemmer->stem_word($wrd);
}
// Склеиваем массив $words обратно в строку
$search_str = implode( "* ", $words ); $search_str = $search_str."*";
// Составляем запрос к БД, чтобы узнать количество записей в результатах поиска -
// это нужно для построения постраничной навигации
$search_query = "SELECT COUNT(*)
FROM ".PRODUCTS_TABLE."
WHERE MATCH (name, description) AGAINST ('".$search_str."' IN BOOLEAN MODE)>0";
$res = db_query( $search_query );
$total = db_result( $res, 0, 0 );
// Проверяем передан ли номер текущей страницы - постраничная навигация
if ( isset($_GET['page']) ) $page = $_GET['page'];
else
$page = 1;
// Начальная позиция
$start = ($page - 1) * SEARCH_RESULT_ON_PAGE;
if ( $total > 0 )
{
$html = "<h3>Результаты поиска:</h3>[slash]n";
$html = $html."<p>Вы искали: ".$good."</p>[slash]n";
$search_query = "SELECT productID, name, description,
MATCH (name, description) AGAINST
('".$search_str."' IN BOOLEAN MODE) AS relev
FROM ".PRODUCTS_TABLE."
HAVING relev>0 ORDER BY relev DESC LIMIT ".$start.", ".SEARCH_RESULT_ON_PAGE;
$res = db_query( $search_query );
// Это для подсвечивания искомых слов
$highlight = implode( "[^-,[:space:]]*|", $words )."[^-,[:space:]]*";
$html = $html."<table width='100%' cellspacing='4' cellpadding='2'>[slash]n";
$html = $html."<tr bgcolor='#EEEEEE'><th width='5%'>ID</th><th>Наименование</th><th >Описание</th></tr>[slash]n";
while ( $result = db_fetch_array( $res ) )
{
$html = $html."<tr bgcolor='#F5F5F5' valign='top'>[slash]n";
$html = $html."<td>".$result["productID"]."</td>[slash]n";
// Подсвечиваем искомые слова
$result["name"] = eregi_replace($highlight, "<font color='#cc0000'>[slash][slash]0</font>", $result["name"]); $html = $html."<td>".$result["name"]."</td>[slash]n";
// Подсвечиваем искомые слова
$result["description"] = eregi_replace($highlight, "<font color='#cc0000'>[slash][slash]0</font>", $result["description"]); $html = $html."<td>".$result["description"]."</td>[slash]n";
$html = $html."</tr>[slash]n";
}
$html = $html."</table>[slash]n";
// Число страниц с результатами поиска
$cnt_pages = ceil( $total/SEARCH_RESULT_ON_PAGE
);
// Постраничная навигация
if ( $cnt_pages > 1 )
{
$html = $html."<div style='margin-left:4px'>";
for( $i = 1; $i <= $cnt_pages; $i++ )
{
if($i != $cnt_pages)
{
if($page == $i)
{
$html = $html."[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$i*SEARCH_RESULT_ON_PAGE."] ";
}
else
{
$html = $html."<a href='".$_SERVER["PHP_SELF"]."?page=".$i."&query=".$good."'>[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$i*SEARCH_RESULT_ON_PAGE."]</a> ";
}
}
else
{
if($page == $i)
{
$html = $html."[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$total."] ";
}
else
{
$html = $html."<a href='".$_SERVER["PHP_SELF"]."?page=".$i."&query=".$good."'>[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$total."]</a> ";
}
}
}
$html = $html."</div>[slash]n";
}
}
else
{
$html = "<h3>Результаты поиска:</h3>[slash]n<p>Ничего не найдено.</p>[slash]n";
}
}
return $html;
}
?>