Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Подсветка текста в поиске

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


     24.05.2013    Ajax, search    Все вопросы » Общие вопросы по PHP    6350

вопрос
Добрый день , в 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
Эксперт

BR0kEN - 25 мая 2013 02:08 -

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

FastFud
Юзер

FastFud - 25 мая 2013 11:41 -

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

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 13:09 -

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 13:10 -

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

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 13:25 -

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 13:28 -

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

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 13:29 -

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 13:32 -

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

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 13:44 -

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 14:30 -

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

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 15:25 -

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 15:28 -

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

находим

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


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

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 15:37 -

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

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

FastFud
Юзер

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
PHP-developer

dj-avtosh - 25 мая 2013 15:45 -

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


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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 15:48 -

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

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

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 15:49 -

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 15:59 -

Создал!

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 16:09 -


По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 20:33 -

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

FastFud
Юзер

FastFud - 25 мая 2013 20:40 -

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

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 20:46 -

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 20:50 -

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

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 20:53 -

попробуйте

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 20:56 -

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

dj-avtosh
PHP-developer

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 );

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 21:00 -

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

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 21:04 -

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

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2013 21:04 -

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

FastFud
Юзер

FastFud - 25 мая 2013 21:06 -

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

FastFud
Юзер

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
Юзер

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
PHP-developer

dj-avtosh - 26 мая 2013 16:14 -

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 26 мая 2013 16:23 -

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

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

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

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

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

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

наверх