Показать сообщение отдельно
  #8 (permalink)  
Старый 18.07.2018, 17:37
Аватар для xShift
Профессор
Отправить личное сообщение для xShift Посмотреть профиль Найти все сообщения от xShift
 
Регистрация: 22.11.2016
Сообщений: 212

ksa, не знаю, все может быть, что очевидно скачивается последний гиг Detroit Become Human - сижу обзоры читаю. Наиграюсь, cделаю - выложу решение. Возможно все равно придется прибегнуть к колхозному explode

Победил лень и наваял чето вроде google отхлопа выдачи -5го уровня.


Цитата:

foreach ($search_query_result as $k => $v) {

$output .= '<li><a href="'. $v['field_route'] .'" title="'. $v['field_description'] .'">'. $v['field_title'] .'</a><span>'. $v['field_description'] .'</span>';

$snippet = preg_split("/". $query_string ."/i", $v['field_content']);

$counter = 1;

foreach ($snippet as $snip) {

$length = ( (int)strlen( $snip ) / 100) * 30; // aka *0.3

if( $counter % 2 !== 0 ) {

$highlight_1 = substr($snip, $length, 0);

}
else {

$highlight_2 = substr($snip, 0, $length);

}

$counter++;

}

$output .= '<dfn style="display:block; margin-bottom: 10px;">... '. trim(preg_replace('/ +/', ' ', preg_replace('/[^A-Za-z0-9 ]/', ' ', urldecode(strip_tags(html_entity_decode($highlight _1 . $query_string . $highlight_2 )))))) .' ...</dfn></li>';

}

$output .= '</ul><p>Search for <b>'. $query_string .'</b>.</p></div>';

print $output;
В $search_query_result запускаем все что прилетело с базы по LIKE %.
Переменная $query_string - содержит сабж запроса.

Далее делаем разбивку без регистра на блоки по совпадению $snippet = preg_split("/". $query_string ."/i", $v['field_content']);

$length = ( (int)strlen( $snip ) / 100) * 30; - тут настраиваем процент кастрации строки.

Ну и смотрим кратно ли двум наш счетчик. Если нет режем шкуру с жопы, если да - то снимаем скальп.

Дальше склеиваем строки, чистим сниппет от entities и html и выводим все нафиг пользователю.

Кто подскажет регулярку лучше - тому смачный минет(у меня не идеально).

Последний раз редактировалось xShift, 18.07.2018 в 21:21.
Ответить с цитированием