Да, именно так.
Думаю вот, как правильно расскрасить каждый элемент...---------- Добавлено 03.05.2013 в 10:14 ----------ivan-lev, ага... понял.
Щас сделаю. Спасибо!!---------- Добавлено 03.05.2013 в 10:21 ----------Там ведь цикл уже есть, обрабатыватся слова по очереди проверяются сравниваются с помощью stristr()..
Наверное можно и раскрасить в том же цикле?---------- Добавлено 03.05.2013 в 10:32 ----------Смысл понятен..
Пока с временем напряг разбираться с циклами.. извиняюсь
Но сделаю точно, уже догадался как...
На всякий случай выложу упрощённый, но рабочй вариант скрипта... в надежде на халявное готовое решение
<?php if (isset($_POST['txtsear'])=="") {return;} $words = $_POST['txtsear'];// Устанока счётчика $ttt=microtime(); $ttt=((double)strstr($ttt, ' ')+(double)substr($ttt,0,strpos($ttt,' '))); $indexfile="indexfile.txt"; # файл с индексом// обрабатываем запрос $total=0; $qu2=str_replace ("+","&",$words); // обрубаем лишние пробелы// $qu2=chop($qu2); // $qu2=ltrim($qu2); $qu2=trim($qu2); echo ('Запрос: <b>'.$qu2).'</b><br><br>';// убираем заглавные буквы / $qu2=mb_strtolower ($qu2); // разбиваем запрос на слова $words = explode (' ', $qu2); // проверяем длинну запроса if (strlen($qu2)>2): // открываем индекс $index=file ($indexfile); $num= (count($index)-1); // для каждой сточки из индекса (одна строчка=один файл) выполняем:$nnn=1; for ($i=1; $i<$num+2; $i++): $contents=$index[$i-1]; //Определяем имя файла:-------------------------$ur = $index[$i-1];$ur=strstr($ur, '||');$ur = str_replace( '||','', $ur); if ($ur !="") {$nn=$i; }$ur = $index[$nn-1];$ur=strstr($ur, '||');$ur = str_replace( '||','', $ur); //определяем тайтл страницы--------------$titl = $index[$i-1];$titl = strstr($titl, '###');$titl = str_replace( '###','', $titl); if ($titl != "" ) { $nnn=$i;} $titl = $index[$nnn-1];$titl = strstr($titl, '###');$titl = str_replace( '###','', $titl); //---------------------------------------------$wordcount =0; $mustfound=1; // выполняем для каждого их запрошенных слов: $mustntfound=1; for ($q=0; $q<count($words); $q++): // обработка знаков *, + и - // знак * if (stristr($words[$q], "*")) {$search=str_replace ("*","",$words[$q]); } else { $search=$words[$q];} // если в слове есть звездочка, то убираем звездочку и добавляем в начало и конец слова по пробелу // если нет проблелов, то слово будет искаться не целиком, а "вообще", // то есть на запрос "чай" будет выводиться и слово "случайный". // bug: скрипт не учитывает, где в слове стоит звездочка и считает, что в любом случае она стоит в конце (!!) // знак & (или +) if (stristr($search, "&")) {$search=str_replace ("&","",$search); $mustfound++; } // если стоит знак +, то количество слов, которые _должны_ быть найдены, увеличиваются на 1 // знак - if (stristr($search, "-")) {$search=str_replace ("-","",$search); $mustntfound=0; } // если стоит знак +, то если слово найдено, весь результат умножается на 0 (смотри дальше). // если слово найдено, считаем его и умножаем на $mustntfound, то есть на 1, // если найдено "правильное" слово и на 0, если найдено слово, помеченное знаком - if (stristr($contents, $search)) { $wordcount++; $wordcount=$wordcount*$mustntfound;} //$rw = "<span style=\"color:#FE0000:\">".$words[$q]."</span>";$rw = "<span style=\"color:#FF0000;\">$words[$q]</span>";$contents = str_replace ($words[$q], $rw, $contents); endfor; // проверяем, все ли слова, помеченные знаком + найдены, // либо (если таких слов нет), найдено ли вообще хоть одно слово if ($wordcount >= $mustfound): // находим в котором это найдено //$file=explode ("\n",$contents); //$file=$file[0]; // выводим результатыecho 'Найдено в файле : <b>'.$ur.'</b> на странице: '; echo ("<a target='_blank' href=../".$ur.">".$titl."</a><br>"); //$file=str_replace (".txt", "", $file); //$file=str_replace ("_", ".", $file); echo ("<b>...".$contents. "...</b><br><br>"); // считаем, сколько надено $total++; endif; // переходим к следующемуу файлу endfor; // выводим результаты if ($total!=0) {echo ('Всего найдено совпадений: '.$total.'<br>'); // считаем, как долго работал скрипт $ddd=microtime(); $ddd=((double)strstr($ddd, ' ')+(double)substr($ddd,0,strpos($ddd,' '))); echo ("Время поиска: ".(number_format(($ddd-$ttt),3))." секунд<br><br>");}else echo ("<b>Ничего не найдено!</b><br><br>"); else: echo ("<br>Слишком короткий запрос!<br><br>"); endif; ?>
Всем спасибо!!!
Кстати, вот этот вариант не раскрашивает.
$rw = "<span style=\"color:#FEBB03:\">".$worlds."</span>";
Пробовал в XAMP 1.7.7 и на хосте sprinthostu.ru
Нормально раскрашивает вариант от Милованов Ю.С
$rw = "<span style=\"color:#FEBB03;\">$worlds</span>";
Добавил в скрипт...
Понял. Спасибо!!
Есть маленькая неувязочка.
ключевые слова оказывается тоже массивом идут в цикле.
т.е $worlds - массив.
Надо подумать....
Щас испытаю....
Похоже начинаю понимать...
Сначала изменяем цвет $worlds, как уже подсказали... Но обзовём его $worlds2
Потом подменяем цвет типа так..
$contents = str_replace ($worlds2, $worlds, $contents);
или как?
Технически как правильно..?
При индексации в текстовом файле образуются строчки по тегам br, p, h.., hr итд..
При поиске строчка контента страницы - один элемент массива и есть $contents.
Скрипт поиска дать?
:)Нет.
Результаты поиска выводятся примерно так:
// выводим результаты echo ("<a target='_blank' href=../".$url.">".$title."</a><br>"); echo ("..." .$contents. "...");
Надо разорвать текст строчки $contents с помощью какой-нибудь функции и подменить в нём $worlds на раскрашенный.
Вот это правильная логика. Поддерживаю.
Кстати, у меня нет в шапке логотипа. Теперь будет. Потом вместо ёлки.
Всем спасибо!
Возможно. Не оправдываюсь.
Логика железная.
А как в теории?
Изменение вроде незначительное. Но ведь... Были картинки и нет картинок.
Возможно косяк Яндекса. Копию он не сохранил.
Наверное надо удалить её из индекса через форму в вебмастере.