Живой поиск Ajax

InstantCMS 2.X
#1 Вчера в 16:16

Есть дополнение живот поиск 

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

Что редактировать в файле, чтобы решить эту проблему?

widget_autocomplete.php

  1. <?php
  2.  
  3. class actionSearchWidgetAutocomplete extends cmsAction {
  4.  
  5. public function run() {
  6.  
  7. if (!$this->request->isAjax() || !($term = $this->request->get('term', ''))) {
  8. return cmsCore::error404();
  9. }
  10.  
  11. $default_order_by = !empty($this->options['order_by']) ? $this->options['order_by'] : 'fsort';
  12.  
  13. $query = $this->request->get('term', '');
  14. $type = $this->request->get('type', 'words');
  15. $date = $this->request->get('date', 'all');
  16. $order_by = $this->request->get('order_by', $default_order_by);
  17.  
  18. if (!in_array($order_by, ['fsort', 'date_pub'], true)) {
  19. return cmsCore::error404();
  20. }
  21.  
  22. if (!in_array($type, ['words', 'exact'], true)) {
  23. return cmsCore::error404();
  24. }
  25.  
  26. if (!in_array($date, ['all', 'w', 'm', 'y'], true)) {
  27. return cmsCore::error404();
  28. }
  29.  
  30. $result_all = [];
  31.  
  32. if ($this->request->has('term')) {
  33.  
  34. if (!$query || !$this->model->setQuery($query)) {
  35. cmsUser::addSessionMessage(LANG_SEARCH_TOO_SHORT, 'error');
  36. return $this->redirectToAction('');
  37. }
  38.  
  39. $this->model->setSearchType($type);
  40. $search_controllers = cmsEventsManager::hookAll('fulltext_search', $this, []);
  41.  
  42. foreach ($search_controllers as $search_controller) {
  43. foreach ($search_controller['sources'] as $sources_name => $sources_title) {
  44.  
  45. if (!empty($this->options['types']) && !in_array($sources_name, $this->options['types'])) {
  46. continue;
  47. }
  48.  
  49. if (empty($search_controller['match_fields'][$sources_name])) {
  50. continue;
  51. }
  52.  
  53. $this->model->filterDateInterval($date);
  54.  
  55. if (!empty($search_controller['joins'][$sources_name])) {
  56. $this->model->applyJoins($search_controller['joins'][$sources_name]);
  57. }
  58.  
  59. if (!empty($search_controller['filters'][$sources_name])) {
  60. $this->model->filterSearch($search_controller['filters'][$sources_name]);
  61. }
  62.  
  63. $this->model->setMatchFields($search_controller['match_fields'][$sources_name])->filterQuery();
  64.  
  65. $results_count = $this->model->getCount($search_controller['table_names'][$sources_name], false);
  66.  
  67. if ($results_count) {
  68. $this->model->selectList($search_controller['select_fields'][$sources_name]);
  69.  
  70. $result = $this->model->getSearchResults($search_controller['table_names'][$sources_name]);
  71.  
  72. foreach ($result as $key => $item) {
  73. if (is_callable($search_controller['item_callback'])) {
  74. $result[$key] = call_user_func_array($search_controller['item_callback'], [
  75. $item,
  76. $this->model,
  77. $sources_name,
  78. $search_controller['match_fields'][$sources_name],
  79. $search_controller['select_fields'][$sources_name]
  80. ]);
  81.  
  82. if ($result[$key] === false) {
  83. unset($result[$key]);
  84. }
  85. }
  86. }
  87.  
  88. $result_all = array_merge($result_all, $result);
  89. }
  90.  
  91. $this->model->resetFilters();
  92. }
  93. }
  94. }
  95.  
  96. $results = [];
  97.  
  98. foreach ($result_all as $item) {
  99. $results[] = array(
  100. 'id' => $item['id'],
  101. 'label' => trim(strip_tags($item['title']), "."),
  102. 'value' => strip_tags($item['title']),
  103. 'url' => $item['url'],
  104. 'image' => html_image_src($item['photo'], 'micro', true)
  105. );
  106. }
  107.  
  108. // Ограничиваем до 8 результатов
  109. $results = array_slice($results, 0, 8);
  110.  
  111. return $this->cms_template->renderJSON($results);
  112. }
  113.  
  114. }
#2 Вчера в 18:00

В этом файле на вид всё в порядке. Он не отвечает за перенаправление куда то. Он просто возвращает результат поиска по слову. Вам надо в консоли смотреть при клике на результат какие данные куда передаются. Скорее всего где то в js файле надо искать ответ.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожее в блогах

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.