Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Подсветка текста в поиске

Подсветка текста в поиске


     24.05.2013    Общие вопросы по PHP    2845

вопрос
Добрый день , в DLE есть код который просвечивает текст в результатах поиска. Мне бы хотелось так сделать и в быстром поиске.


function hilites($search, $txt) {
$r = preg_split( '((>)|(<))', $txt, - 1, PREG_SPLIT_DELIM_CAPTURE );                    \
for($i = 0; $i < count( $r ); $i ++) {
if( $r[$i] == "<" ) {
$i ++;
continue;
}
$r[$i] = preg_replace( "#($search)#i", "<span style='background-color:yellow;'><font color='red'>\\1</font></span>", $r[$i] );
}
return join( "", $r );
}


данный выше код в расширенном поиске просвечивает текст.

Комментарии пользователей (34)

BR0kEN
163

235 | 275

BR0kEN - 25 мая 2013 02:08 - Эксперт

Можно юзать что-то эдакое: http://habrahabr.ru/post/180573/

FastFud
50

1599 | 588

FastFud - 25 мая 2013 11:41 - Юзер

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

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 13:09 - шашлычник

Ой ой, джойны форы)) это делается через strong_replace одной строкой.

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 13:10 - Юзер

Пример можно ?

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 13:25 - шашлычник

А какой тут может быть пример:
 $content=str_replace ( $_REQUEST['search'], 'тег' . $_REQUEST['search'] .  'тег', $content ); 

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 13:28 - Юзер

Вы уверены что работает ? у меня что то не хочет

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 13:29 - шашлычник

Ну вы не делайте копипаст, я привёл частный случай, переменные заменитель на свои.

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 13:32 - Юзер

Call to undefined function star_replace ... я заменил на свои.

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 13:44 - шашлычник

Вместо star_replace str_replace, телефонное т9)

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 14:30 - Юзер

Не подсвечивает текст. Ничего вообще не делает.

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 15:25 - шашлычник

приведите пример что сделали

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 15:28 - шашлычник

Самое страшное на нашем веку, что люди ленятся думать:

находим

$buffer .= "<span>".$description."</span></a>";


ниже вставляем

$buffer = str_replace ( $query, '<span style="color: green;">' . $query . '</span>',  $buffer );

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 15:37 - Юзер

Большое вам человеческое спасибо.

P.S могли бы сразу так и написать, ну все ровно спасибо. (я в php не шарю), :)

FastFud
50

1599 | 588

FastFud - 25 мая 2013 15:41 - Юзер

А еще 1 вопрос.

Есть у меня скажем так модуль для загрузка картинок на сервер он работает и в новость вывожу картинку тегом {poster}

Я попробовал вывести и в результатах быстрого поиска.

Делал так:


$img = $db->super_query( "SELECT images, news_id FROM " . PREFIX . "_posters where news_id = '{$row['id']}'" );


и чуть ниже

$buffer .= "<span><img src=\"/uploads/posts/posters/".$img['images']."\" style=\"width: 30px;height: 40px;\">".$description."</span></a>";


При вводе ключевого слово находит новость и картинку показывает но только по 1 новость показывает.

Не Знаете почему ?

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 15:45 - шашлычник

$img = $db->super_query( "SELECT images, news_id FROM " . PREFIX . "_posters where news_id = '{$row['id']}'"  );


Ну верно, этим запросом вы получаете постер под определенную новость одну.

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 15:48 - Юзер

А как сделать чтобы у каждого найденного материала в поиске присутствовал его постер свой ?.

Прошу помогите если знаете как буду очень благодарен. 3 дня мучаюсь и безрезультатно.

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 15:49 - шашлычник

создайте вопрос, я его промодерирую и отвечу, как раз всем пригодиться.

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 15:59 - Юзер

Создал!

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 16:09 - шашлычник


skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 20:33 - Юзер

Если написать маленькими буквами название какого либо материала в поиске то он сам автоматически ищет те ключевые слова и подсвечивает их в alt_name альтернативном имени и выводит чуть выше ее. Как это исправить ?

FastFud
50

1599 | 588

FastFud - 25 мая 2013 20:40 - Юзер

Он подсвечивает только те символы которые в название новости, то есть возьмем к примеру: Far Cry если написать far cry или Far cry то все подсветка символов исчезает.

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 20:46 - шашлычник

ну нужно игнорировать регистр модификаторами через preg_replace, случай снова частный

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 20:50 - Юзер

Я же сказал что в PHP я Фонарь без Батареек. Вы имели в виду поменять str_replate на preg_replace ?

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 20:53 - шашлычник

попробуйте

$buffer = str_ireplace ( $query, '<span style="color: green;">' . $query . '</span>',  $buffer );

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 20:56 - Юзер

Все ровно показывает и альтернативное имя новости.

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 21:00 - шашлычник

а если Вы только хотите подсвечивать описание, то:

$description = str_ireplace ( $query, '<span style="color: green;">' . $query . '</span>',  $description );


Название:

$title = str_ireplace ( $query, '<span style="color: green;">' . $query . '</span>',  $title );

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 21:00 - шашлычник

При этом убрав это:

$buffer = str_ireplace ( $query, '<span style="color: green;">' . $query . '</span>',  $buffer );

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 21:04 - Юзер

Я пробовал так но не подсвечивает ничего. Ни с $title ни с $description

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 21:04 - шашлычник

напишите мне в аську

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 21:06 - Юзер

есть только skype: maximus5999 ICQ я не пользуюсь

FastFud
50

1599 | 588

FastFud - 25 мая 2013 21:20 - Юзер

Да прошу прощения, моя ошибка была в том что я не туда поставил эту строку.


$title = str_ireplace ( $query, '<span style="color: #b0b0b0;">' . $query . '</span>',  $title );


надо после

if( dle_strlen( $row['title'], $config['charset'] ) > 43 ) $title = dle_substr( $row['title'], 0, 43, $config['charset'] ) . " ...";
        else $title = $row['title'];

FastFud
50

1599 | 588

FastFud - 26 мая 2013 12:42 - Юзер

Лучше всего использовать так :


после
if( dle_strlen( $row['title'], $config['charset'] ) > 43 ) $title = dle_substr( $row['title'], 0, 43, $config['charset'] ) . " ...";
        else $title = $row['title'];

вставить

$title = eregi_replace ( $query, '<b style="color: #b0b0b0;">\\0</b>',  $title );

для описании после

$description = preg_replace( "'\[attachment=(.*?)\]'si", "", $description );

вставьте

$description = eregi_replace ( $query, '<b style="color: #b0b0b0;">\\0</b>',  $description );

dj-avtosh
39

1479 | 390

dj-avtosh - 26 мая 2013 16:14 - шашлычник

Eregi_replace НЕ СТОИТ использовать, это устаревший и медленный метод!!!

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 26 мая 2013 16:23 - шашлычник

Примеры замен:

ereg('expression') -> preg_match('/expression/')

eregi('expression') -> preg_match('/expression/i')

skype: elhan.isaev

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы