Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Контрастная подсветка найденных слов поисковыми скриптами (Rumata)
Author Message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Jun 18, 2004 3:12 am ()
   Post subject: Контрастная подсветка найденных слов поисковыми скриптами
Reply with quote

после небольшого обсуждения с Ant (forum.dklab.ru/users/Ant/)'ом выкладываю функцию подсветки слов, найденных поисковыми скриптами
Code (php): скопировать код в буфер обмена
<?

/**
* Useful routine for text highlighting wihin search scripts
* Searchs the selected words in the texts and highlight them
*
* @param   array   $words       Array of lookup words. You can pass them
*          from the user request forms or URL.
* @param   array   $texts       Array of found texts and fragments. These
*          may be result data recieved from any database or files.
* @param   integer $color       Foreground color for highlighted words.
*          (Optional, by default sets to `0xFFFFFF').
* @param   srting  $class_name  Name of class for additional definition of
*          highlighted words styles. (Optional, by default sets to `hilite').
*
* @return  array   Array of found original texts with highlighted words
*/

function search_hilite($words, $texts, $color=0xFFFFFF, $class_name="hilite")
{
    if (($color & 0x00FF00) < 0x008000) {
        $color = (~$color) & 0xFFFFFF;
    }
    $nvcolor = (~$color) & 0xFFFFFF;
    $bgcolor = $fgcolor = $color;
    foreach ($words as $i => $word) {
        do {
            $bgcolor = ($bgcolor + 0x906030) & 0xFFFFFF;
        } while ($bgcolor == $color);
        $fgcolor = (($bgcolor & 0x00FF00) < 0x008000) ? $color : $nvcolor;
        $search_words[$i] = "/\b($word)\b/mi";
        $hilite_words[$i] = "<span class=$class_name style='"
            . "background-color: #" . sprintf (www.php.net/sprintf)("%06X", $bgcolor) . "; "
            . "color: #" . sprintf (www.php.net/sprintf)("%06X", $fgcolor) . ";"
            . "'>\\1</span>";
    }
    foreach ($texts as $i => $text) {
        $hilite_texts[$i] = preg_replace (www.php.net/preg_replace)($search_words, $hilite_words, $text);
    }
    return $hilite_texts;
}

?>
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Jun 18, 2004 3:14 am (спустя 1 минуту 13 секунд)
   Post subject:
Reply with quote

search_hilite.php предполагается использовать полностью, частично или полностью переписанным в проекте Denwer Search (forum.dklab.ru/perl/advises/DnsearchDenwerSearch.html)
пример испольнения. приведен ниже
Code (php): скопировать код в буфер обмена
<style>
.hilite {
  font-weight: bold;
  font-family: monospace;
}
</style>
<?

include "search_hilite.php";

$words = array (www.php.net/array)("queen", "to", "tomato", "that", "the", "this", "those", "these");

$texts = array (www.php.net/array)(
    "tomato queen to that the this those these abracadabra tomato tomato",
    "To be or not to be",
    "That is the question",
    "\"Queen Mary\" is the drink of vodka with tomato",
    "The Pink Floyd's 'The More' album",
);

$hilite_texts = search_hilite($words, $texts);

foreach ($hilite_texts as $text) {
    echo (www.php.net/echo) "<li>$text\n";
}

?>
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 415
   поощрить/наказать


PostPosted: Fri Jun 18, 2004 4:14 am (спустя 1 час 2 секунды)
   Post subject:
Reply with quote

Так DNSearch же на Perl...
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Jun 18, 2004 4:22 am (спустя 8 минут)
   Post subject:
Reply with quote

согласен...
Дмитрий Котеров wrote:
DNSearch же на Perl
обсуждение шло на уровне псевдокода потом Антону потребовался реальный пример. он был приведен мной на PHP. потом он же предложил выложить в готовые решения в виде функции
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Fri Jun 18, 2004 10:32 am (спустя 6 часов 9 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Так DNSearch же на Perl...
А я вот решил совместить приятное с полезным. (-;
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Jun 18, 2004 11:39 am (спустя 1 час 7 минут)
   Post subject:
Reply with quote

Code (php): скопировать код в буфер обмена
$words = array (www.php.net/array)("queen", "to", "tomato", "that", "the", "this", "those", "these");

$texts = array (www.php.net/array)(
    "tomato queen to that the this those these abracadabra tomato tomato",
    "To be or not to be",
    "That is the question",
    "\"Queen Mary\" is the drink of vodka with tomato",
    "The Pink Floyd's 'The More' album",
);

eregi_replace (www.php.net/eregi_replace)($words,'<span style="background-color:white;color:red;font-weight:bold;">\\0</span>',$texts);
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Fri Jun 18, 2004 11:59 am (спустя 20 минут)
   Post subject:
Reply with quote

yUAC:
Нужно разными цветами выделять. При этом ещё учитывать, какой цвет должен быть у самого выделяемого текста (если фон яркий, то цвет текста должен быть чёрным и наоборот). В общем, как в Гугле.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Fri Jun 18, 2004 12:03 pm (спустя 4 минуты)
   Post subject:
Reply with quote

Скорость ещё очень сильно зависит от того, какой запрос. Если ты будешь искать по «windows home edition», то, вероятно, поиск будет проходить намного быстрее, чем по регулярному выражению «/w+/» (хотя благодаря WingedFox'у даже так он будет искать достаточно быстро).

P.S. А разве на «малых и средних» сайтах бывают такие объёмы «чистого» HTML-наполнения?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 415
   поощрить/наказать


PostPosted: Fri Jul 23, 2004 7:44 pm (спустя 1 месяц 5 дней 7 часов 40 минут)
   Post subject:
Reply with quote


М

Вы уж извините, но сделаем так. (-:
Ветка выделена в отдельную тему «Подсветка слов»,
расположенную в форуме Мусоропровод (23 Июля 2004, 20:44).
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML