Выделите искомое ключевое слово, используя открытые представления фильтра?

12

В представлении я добавил открытый фильтр: Поиск: Фильтр условий поиска

Работает нормально, но я бы хотел выделить искомое ключевое слово в результатах.

Как мне это сделать?

chefnelone
источник
Вы можете использовать файл TPL для этого ..
Sumit Madan
да, я думаю, что я должен использовать функцию для замены искомого ключевого слова. Но как мне получить искомое ключевое слово, и что, если есть более одного ключевого слова?
Chefnelone
Если вы можете использовать jQuery, есть небольшой хитрый способ сделать это.
niksmac
да думаю об этом как получить .. вы можете использовать jquery, как сказал nikhil ..: D
Sumit Madan

Ответы:

7

Вы можете использовать что-то вроде выделения, которое находит и добавляет класс ко всем экземплярам слова на странице, и вместо подачи статического слова вы используете содержимое поля поиска.

Вы можете найти дополнительную информацию и ссылки на другие версии в вопросе StackOverflow. Выделите слово с помощью jQuery .

в промежутке
источник
Я получаю это работает. Это JavaScript, но это нормально. Благодарю.
Chefnelone
11

Используя функцию search_excerpt, вы можете выделить искомое ключевое слово. Он показывает ключевое слово жирным шрифтом.

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

Пример показан ниже,

например: // здесь выставлено поле тела

В вашем представлении TPL файл добавить следующий код

 <?php foreach ($rows as $id => $row): 

      $keys = $_GET['body_value'];
      $row = search_excerpt($keys, $row);
 ?>

оно выделит искомое слово, см. скриншот ниже

введите описание изображения здесь

Ануп джозеф
источник
Это делает работу, но это удаляет структуру строки представления. Представление показывает контент (не поля) как тизер. Как только поиск завершен, результат не показывает тизер, а только необработанные данные. Можно ли это решить.
Chefnelone
Я вижу, что функция search_excerpt удаляет всю разметку. Может ли это измениться каким-то образом?
Chefnelone
Я думаю, что это лучший вариант, если представления отображаются в стиле для отображения полей, но бесполезны, если представление отображает контент (полный, тизер, ..)
chefnelone
0
function custom_views_pre_render(&$view) {
  if ($view->name == 'article') {
    $result = $view->result;
    foreach ($result as $i => $row) {
      $body = $view->result[$i]->field_body[0]['rendered']['#markup'];
      $strong = $view->exposed_data['body_value'];
      $view->result[$i]->field_body[0]['rendered']['#markup'] = str_replace($strong, '<strong>' . $strong . '</strong>', $body);
    }
  }
}

Пример для поля тела . В ваш пользовательский модуль.

александр пилипенко
источник