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 и выводим все нафиг пользователю.
Кто подскажет регулярку лучше - тому смачный минет(у меня не идеально).