Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Отображение результатов поиска по сайту
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Отображение результатов поиска по сайту

Страниц (2): [1] 2 »
 

1. vsll - 26 Февраля, 2011 - 18:23:11 - перейти к сообщению
Привет всем! Я использую готовый движок для своего сайта. Модуль поиска по сайту в комплекте уже есть. Ищет хорошо, но результат отображается с помощью:
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         if ($_GET['chars'] != 0) {
  3.                 $text = nl2br(stripslashes(substr($text, 0, $_GET['chars'])."..."));
  4.         } else {
  5.                 $text = nl2br(stripslashes($text));
  6.         }
  7.         return $text;
  8. }
упрощённо (без возможности выбора длины результата поиска) будет так:
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         $text = nl2br(stripslashes(substr($text, 0, 500)."..."));
  3.         return $text;
  4. }
Проблема в том, что ключевое слово не всегда оказывается в указанном пределе количества отображаемых символов, те в пределе 0-500 не попадает, а 0-1000 попадает.
Какая функция и как её задать может показывать именно тот кусок текста в котором находится ключевое слово (как в гугл и тд )?
Если нет времени вникать, то, пожалуйста, приведите какие-нибудь примеры
2. OrmaJever - 26 Февраля, 2011 - 19:01:48 - перейти к сообщению
strpos() - возвращает позицию символа/строки.
strlen() - можно взять её длину
substr() - берёт часть строки
Несложными математическими операциями можно взять искомое словов перед которым будет 50 символо и после него тоже 50.

$str - строка в которой ищем
$search_word - слово которое ищем
Писал по быстрому поэтому могут быть ошибки. Главное понять суть
3. vsll - 26 Февраля, 2011 - 19:06:21 - перейти к сообщению
Спасибо, попробую
4. vsll - 26 Февраля, 2011 - 21:06:32 - перейти к сообщению
Не получается, модуль работает по принципу индексации страниц и встретив ключевое слово, выдаёт ссылку на саму страницу и по желанию: либо весь текст, либо кусок текста, а как задать строку в которой находиться ключевое слово, не понятно, по крайней мере мне, пока вот, что получается на данный момент:
PHP:
скопировать код в буфер обмена
  1.       function search_textfrag($text) {
  2.               $text = nl2br(stripslashes(substr($str, strpos($_GET['stext'], 1) - 50, strlen($str)+50)."..."));
  3.               return $text;
  4.       }


Undefined variable: str
5. ALEN - 26 Февраля, 2011 - 21:12:03 - перейти к сообщению
Vasiliya
Ну все хочется красиво и удобно и просто)))
Есть такая штука:
preg_match_all - вот с ней очень удобно будет выдрать ту самую нужную часть
6. vsll - 26 Февраля, 2011 - 21:22:53 - перейти к сообщению
preg_match_all
Именно по этой штуке я к вам из гугла и попала, а как её задать не знаю, в одном скрипте какогото freeware поисковика видела ещё и вот такое str_replace. Что там нужно в скобках писать? извините за тупой вопрос.
7. ALEN - 26 Февраля, 2011 - 21:24:06 - перейти к сообщению
Vasiliya
Ну для начала советую прочесть про эти функции и понять для чего они, а потом уже применять
8. vsll - 26 Февраля, 2011 - 21:44:15 - перейти к сообщению
Завтра попробую, может до завтра кто-нибудь найдётся с подобной и уже решённой проблемой, если что, ссылка на описание функции http://php.su/functions/?preg_match
9. ALEN - 26 Февраля, 2011 - 21:46:31 - перейти к сообщению
Vasiliya
http://php.su/functions/?preg_match_all )))
10. vsll - 27 Февраля, 2011 - 18:33:43 - перейти к сообщению
Вот это работает
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         $text = nl2br(stripslashes(str_replace(" ","+",$_GET['stext'])."..."));
  3.         return $text;
  4. }

спасибо http://www[dot]project09[dot]com/tutoria[dot][dot][dot]P/google-search/
но показывает только искомое слово (фразу), надо ещё сделать чтобы 150 символов до и после и не получиться, КТО ЗНАЕТ помогите!
11. ALEN - 27 Февраля, 2011 - 20:35:46 - перейти к сообщению
Vasiliya
PHP:
скопировать код в буфер обмена
  1. $string="Нарушения целости кожных покровов, слизистых оболочек и поверхности внутренних органов, происходящие в результате механического или иного воздействия, называются раной. Повреждение кожных покровов обычно сопровожден нарушением целости и более глубоко расположенных тканей. Полость, образовавшаяся между тканями в результате проникновения ранящего предмета в глубину тела, называется раневым каналом. В зависимости от характера ранящего предмета различают колотые, резаные, рубленые, ушибленные, рваные, огнестрельные, укушенные раны. Чем острее предмет и чем быстрее наносится повреждение, тем меньше повреждены края раны.  По степени повреждения раны делятся на поверхностные и глубокие. Глубокие раны могут сопровождаться повреждением сосудов, нервов, костей, сухожилий, внутренних органов. Глубокие раны, проникающие в полость (брюшная, грудная, череп), называются проникающими. Все остальные виды ран независимо от их глубины называются непроникающими.";
  2. preg_match_all("~\s(.{50,70})(раневым каналом)(.{50,70})\s~uisU",$string,$match);
  3. echo $match[1][0]."<b>".$match[2][0]."</b>".$match[3][0];


Но тут еще для рабочего варианта нужно много проверок сделать и т.д. и т.п.
12. vsll - 27 Февраля, 2011 - 20:47:11 - перейти к сообщению
Oh my God! А вы наверное хирург по совместительству. Я не понимаю как задать это регулярное выражение - шаблон, вчера пробовала какойто делиметер неизвестный короче и всё, я не программист даже по совместительству и вся эта терминология для меня как традиционный китайский
Ну вот, например,
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         $text = nl2br(stripslashes(preg_match_all("~\s(.{50,70})($_GET['stext'])(.{50,70})\s~uisU",$text,$match)."..."));
  3.         echo $match[1][0]."<b>".$match[2][0]."</b>".$match[3][0];
  4.         return $text;
  5. }

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
вообще ничего нет
13. vsll - 28 Февраля, 2011 - 12:56:58 - перейти к сообщению
Что не так?
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         $sphrase = $_GET['stext'];
  3.         $text = nl2br(stripslashes(preg_match_all("~\s(.{50,70})($sphrase)(.{50,70})\s~uisU",$text,$matches)."..."));
  4.         for ( $i = 0 ; $i < count ( $matches [ 0 ]); $i ++) {
  5.             echo "matched: " . $matches [ 0 ][ $i ] . "\n" ;
  6.             echo "part 1: " . $matches [ 1 ][ $i ] . "\n" ;
  7.             echo "part 2: " . $matches [ 3 ][ $i ] . "\n" ;
  8.             echo "part 3: " . $matches [ 4 ][ $i ] . "\n" ;
  9.         }  
  10.         return $text;
  11. }


И в итоге 0 (ничего не выводит)
14. vsll - 01 Марта, 2011 - 20:56:36 - перейти к сообщению
Вот это работает:
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         $text = nl2br(stripslashes(substr(stristr($text, $_GET['stext']), 0, 500)."..."));
  3.         return $text;
  4. }

Выдаёт фрагмент с первой попавшейся поисковой фразы и последующие за ней 500 символов.
ALEN А как с preg_match_all всё это сделать, так и не догнала, если не сложно напиши пару строчек на эту тему
15. ALEN - 01 Марта, 2011 - 20:59:02 - перейти к сообщению
Vasiliya
$_GET['stext'] - экранировать лень?

 

Powered by ExBB FM 1.0 RC1