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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Отображение результатов поиска по сайту

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Изменить готовый скрипт поиска по сайту
vsll
Отправлено: 26 Февраля, 2011 - 18:23:11
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Привет всем! Я использую готовый движок для своего сайта. Модуль поиска по сайту в комплекте уже есть. Ищет хорошо, но результат отображается с помощью:
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 попадает.
Какая функция и как её задать может показывать именно тот кусок текста в котором находится ключевое слово (как в гугл и тд )?
Если нет времени вникать, то, пожалуйста, приведите какие-нибудь примеры

(Отредактировано автором: 26 Февраля, 2011 - 19:04:28)

 
 Top
OrmaJever
Отправлено: 26 Февраля, 2011 - 19:01:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




strpos() - возвращает позицию символа/строки.
strlen() - можно взять её длину
substr() - берёт часть строки
Несложными математическими операциями можно взять искомое словов перед которым будет 50 символо и после него тоже 50.

$str - строка в которой ищем
$search_word - слово которое ищем
Писал по быстрому поэтому могут быть ошибки. Главное понять суть


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vsll
Отправлено: 26 Февраля, 2011 - 19:06:21
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Спасибо, попробую
 
 Top
vsll
Отправлено: 26 Февраля, 2011 - 21:06:32
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Не получается, модуль работает по принципу индексации страниц и встретив ключевое слово, выдаёт ссылку на саму страницу и по желанию: либо весь текст, либо кусок текста, а как задать строку в которой находиться ключевое слово, не понятно, по крайней мере мне, пока вот, что получается на данный момент:
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

(Отредактировано автором: 26 Февраля, 2011 - 21:07:36)

 
 Top
ALEN
Отправлено: 26 Февраля, 2011 - 21:12:03
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Vasiliya
Ну все хочется красиво и удобно и просто)))
Есть такая штука:
preg_match_all - вот с ней очень удобно будет выдрать ту самую нужную часть
 
 Top
vsll
Отправлено: 26 Февраля, 2011 - 21:22:53
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




preg_match_all
Именно по этой штуке я к вам из гугла и попала, а как её задать не знаю, в одном скрипте какогото freeware поисковика видела ещё и вот такое str_replace. Что там нужно в скобках писать? извините за тупой вопрос.
 
 Top
ALEN
Отправлено: 26 Февраля, 2011 - 21:24:06
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Vasiliya
Ну для начала советую прочесть про эти функции и понять для чего они, а потом уже применять
 
 Top
vsll
Отправлено: 26 Февраля, 2011 - 21:44:15
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Завтра попробую, может до завтра кто-нибудь найдётся с подобной и уже решённой проблемой, если что, ссылка на описание функции http://php.su/functions/?preg_match
 
 Top
ALEN
Отправлено: 26 Февраля, 2011 - 21:46:31
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




 
 Top
vsll
Отправлено: 27 Февраля, 2011 - 18:33:43
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Вот это работает
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 символов до и после и не получиться, КТО ЗНАЕТ помогите!

(Отредактировано автором: 27 Февраля, 2011 - 20:07:33)

 
 Top
ALEN
Отправлено: 27 Февраля, 2011 - 20:35:46
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




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


Но тут еще для рабочего варианта нужно много проверок сделать и т.д. и т.п.
 
 Top
vsll
Отправлено: 27 Февраля, 2011 - 20:47:11
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




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
вообще ничего нет

(Отредактировано автором: 27 Февраля, 2011 - 21:06:07)

 
 Top
vsll
Отправлено: 28 Февраля, 2011 - 12:56:58
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Что не так?
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 (ничего не выводит)

(Отредактировано автором: 28 Февраля, 2011 - 19:52:33)

 
 Top
vsll
Отправлено: 01 Марта, 2011 - 20:56:36
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Вот это работает:
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 всё это сделать, так и не догнала, если не сложно напиши пару строчек на эту тему
 
 Top
ALEN
Отправлено: 01 Марта, 2011 - 20:59:02
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Vasiliya
$_GET['stext'] - экранировать лень?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB