Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Подсвечивание искомого текста в скрипте поиска  (Прочитано 2507 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Всем привет.
Прикрутил на сайт форму поиска, но захотел организовать подсветку запрашуемого текста в выводе результата.
Но никак не могу свести все.
Вот скрипт поиска.
(Нажмите, чтобы показать/скрыть)

Пробовал по даных примерах: http://webmastak.com/article.aspx?id=325
Просветите темного.
Спасибо.
« Последнее редактирование: 15 Декабря 2009, 12:49:24 от TrEK »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Подсвечивание искомого текста в скрипте &
« Ответ #1 : 15 Декабря 2009, 12:53:31 »
               echo '<center>По вашому запросу  <span style="background-color: yellow;"><font color=red><b>'.$words.'</b></font></span> найдено '.$num_rows.' рядков</center>';
Красным цветом уже выделяется вроде.
Сильно вникать в текст программы не хочется.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
               echo '<center>По вашому запросу  <span style="background-color: yellow;"><font color=red><b>'.$words.'</b></font></span> найдено '.$num_rows.' рядков</center>';
Красным цветом уже выделяется вроде.

Нет, нет.. это понятно. Это строка где указуется по какому слову был поиск, и там красным подсвечивается слово, а желтым фон слова.
Но меня интересует именно подсвечивать слова в выводе результатов:

                            <!--DWLayoutTable-->
                            <tr>
                          <td id="w" width="700" height="20" valign="middle"><a href="http://www.films.com/?page=item&id='.$id.'" title="'.$title.'"> '.$title_en.' - </font color=black><b>'.$title.'</b></font></a></td>
                       
                            </tr></table>';

Тоесть если был запрос жизнь,чтобы скрипт дал такой вывод:

Life Or Something Like It - Жизнь или что-то вроде того
Zivot je cudo - Жизнь как чудо
Private Life of Plants - BBC: Невидимая жизнь растений
Vita ? bella - Жизнь прекрасна


Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Подсвечивание искомого текста в скрипте &
« Ответ #3 : 15 Декабря 2009, 13:24:14 »
Перед этим эхом надо проделать замену текста (через регулярное выражение).
Там есть несколько спец. функций:
preq_match
preq_replace
preq_replace_callback
...
порядка 5-6 штук.
« Последнее редактирование: 15 Декабря 2009, 13:32:15 от alexander.pronin »

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Перед этим эхом надо проделать замену текста (через регулярное выражение).
Собственно даный шаг меня и затрудняет.
Перед запросом в БД надо вставить функцию function highlighter ?
Я не очень силен в программировании и пшп... потому многие ньюансы могу пропустить.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Подсвечивание искомого текста в скрипте &
« Ответ #5 : 15 Декабря 2009, 13:35:54 »
После запроса надо обработать результат.
Зачем завязываться с какими-то фичами неизвестно чего, лучше использовать функции заложенные в php, мсм.
Для стартового рывка
http://www.phpfaq.ru/regexp
« Последнее редактирование: 15 Декабря 2009, 13:38:11 от alexander.pronin »

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
После запроса надо обработать результат.
Зачем завязываться с какими-то фичами неизвестно чего, лучше использовать функции заложенные в php, мсм.
Поймите, я скрипт поиска не писал.. я его малость переделал.
Потому для меня тяжело предпринять подобные варианты действий.
Какие функции лучше использовать и могли бы Вы подсказать пример?

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Я Вам дал ссылку, там все просто.
preg_replace(шаблон_поиска, шаблон_замены, объект_с_которым_манипулируем)

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Я Вам дал ссылку, там все просто.
preg_replace(шаблон_поиска, шаблон_замены, объект_с_которым_манипулируем)


спасибо. Буду мучить )

Пользователь решил продолжить мысль 16 Декабря 2009, 00:11:55:
$words=preg_replace($words ,'<font color=green>"$words"</font>',$words); - внесение этой строки в начало текста не помогло.

Что-то я туплю... Смотрите, по запросу $keywords мы получаем уже нужный нам массив $words,и по нему ищем в БД подобные значения по яйчейкам tittle и title_en в таблице моей БД.

Да и вывод ссылками делается по переменным $title и $title_en.
Тоесть preg_replace, я так понимаю, уже надо производить в этих значениях?
Привер:
делаем запрос  в БД: kill , это у нас будет $words.
Обнаруживается что есть сходство с запросом в поле title_en таблицы film БД dbname, где title_en 'Killing Me Softly' , а title -  'Убей меня нежно'.
Ну и скрипт нам выводит среди других результатов сходства строку 'Killing Me Softly - Убей меня нежно', тоесть '$title_en - $title'.

И я так понимаю ,что перед этим выводом надо описать переменную $title_en с помощью preg_replace ?
« Последнее редактирование: 16 Декабря 2009, 00:11:56 от TrEK »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Подсвечивание искомого текста в скрипте &
« Ответ #9 : 16 Декабря 2009, 08:24:15 »
$words=preg_replace($words ,'<font color=green>"$words"</font>',$words); - внесение этой строки в начало текста не помогло.

Обратите внимание на разделители.
Присвоение $words выглядит странно, но ладно.
Рекомендую отработать в терминале (я так делаю) замену, а потом уже вставлять в скрипт.
Пример для аналогии.


#! /usr/bin/php5
<?php
$var="2009-12-08";
echo "Изначально: ".$var."\n";

echo "Выделим год\n";
$res=preg_match("/\d{4}/",$var,$found);
echo "Найдено: $res"."\n";
print_r($found);
echo "Получилось: ";
echo $found[0]."\n";

echo "Выделим месяц\n";
$res=preg_match("/-\d{2}/",$var,$found);
echo "Найдено: $res"."\n";
print_r($found);
echo "Получилось: ";
echo $found[0]."\n";
echo "Вторая итерация";
$temp=$found[0];
$res=preg_match("/\d{2}/",$temp,$found);
echo "Найдено: $res"."\n";
print_r($found);
echo "Получилось: ";
echo $found[0]."\n";

echo "Выделим год и месяц\n";
$res=preg_match("/\d{4}-\d{2}/",$var,$found);
echo "Найдено: $res"."\n";
print_r($found);
echo "Получилось: ";
echo $found[0]."\n";

echo "Выделим день\n";
$res=preg_match("/\d{2}$/",$var,$found);
echo "Найдено: $res"."\n";
print_r($found);
echo "Получилось: ";
echo $found[0]."\n";


echo "------------------";
$var="14:15:43";
echo "Изначально: ".$var."\n";
echo "Выделим час\n";
$res=preg_match("/^\d{2}/",$var,$found);
echo "Найдено: $res"."\n";
print_r($found);
echo "Получилось: ";
echo $found[0]."\n";
?>

Это для match, сделайте для replace что-нибудь подобное.
Обратите внимание на /.../
« Последнее редактирование: 16 Декабря 2009, 09:04:27 от alexander.pronin »

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
ойой... дебри.;(
не могу я понять принципп.. даже по примерам. Ну вернее  принципп я понял, как происходит замена.
А вот в моем случае... Как можна в готовом выводе $title подсветить $words , которое является частью этого же $title .
Как не пробовал крутить и присваивать разные значения для preg_replace - не получается. :-

Пользователь решил продолжить мысль 16 Декабря 2009, 10:59:53:
".teg(htmlspecialchars(highlight_string($title["words"],true)))."

даная строка может мне чем-то помочь?
« Последнее редактирование: 16 Декабря 2009, 10:59:53 от TrEK »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Подсвечивание искомого текста в скрипте &
« Ответ #11 : 16 Декабря 2009, 11:07:52 »
Проделал для Вас.
Сам скрипт.

#! /usr/bin/php5
<?php
echo "Заменим носки на водку\n";
$var="У меня есть носки. И еще что-то.";
echo "Изначально: ".$var."\n";

$var= preg_replace("/носки/","водка",$var);
echo "Получилось: ".$var."\n";
?>

Вывод.
al@ubuntu-desktop1:~$ '/home/al/Desktop/Programming/php/reg_replace.php'
Заменим носки на водку
Изначально: У меня есть носки. И еще что-то.
Получилось: У меня есть водка. И еще что-то.
al@ubuntu-desktop1:~$

PS. Анекдот.
Жена говорит мужу: "Ты бы носки поменял".
Он: "Только на водку".
« Последнее редактирование: 16 Декабря 2009, 11:30:15 от alexander.pronin »

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
да с простенькими примерами понятно.. я вот сам щас тут модернизирую его.. а вот до моего примера не доходит граница познания... пока что

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Дайте:
строку исходную и
что нужно получить.
Мы вместе что-нибудь сваяем. ;D

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
<form method="POST">
Введите название: <input name="keyword">
<input type="submit" value="Поиск">
</form>

Вводим в форму kill

Далее зарпос проходит сквозь функцию, которая обрезает всякиую ерунду  "не,на,ее,он,у,в,с". Далее формируется массив , который передается в саму БД.


    $words = trim($_POST['keyword']);
    $words = strip_tags($words);
    $words = str_replace("'", "", $words);
    $words = str_replace('"', "", $words);
    $words = str_replace("-", "", $words);
    $words = str_replace(",", "", $words);



При обработке БД, если находяться совпадения в таблице по  $words  в полях titlte OR title_en выводим результат:

 

<a href="http://www.films.com/?page=item&id='.$id.'" title="'.$title.'"> '.$title_en.' - '.$title.'</a>


Вывод результата выводится не просто текстом... а ссылками на найденные елементы таблицы... (с указанием title и title_en)

Тоесть мы получаем такой список:

Kill Bill: Vol. 1 - Убить Билла. Фильм 1
Kill Bill: Vol. 2 - Убить Билла. Фильм 2
Killing Me Softly - Убей меня нежно
Natural Born Killers - Прирожденные убийцы
BBC: Who Killed Rasputin? - BBC: Кто убил Распутина?
Kill devil - Убить дьявола

Так вот, я так понимаю что надо подсветку не $words делать...а в $title_en, или $title . Каким образом сделать эту мозголомку? :)

Пользователь решил продолжить мысль 16 Декабря 2009, 12:45:14:
====
====
====
Ну что же будем попорядку.. модернизировать скрипт, пока не получу жедаемый результат, начну с Вашого примера :)



(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 16 Декабря 2009, 12:45:14 от TrEK »

 

Страница сгенерирована за 0.026 секунд. Запросов: 21.