Интеграция поиска в компонент InstantCMS 1.10.4+

Что не так делаю?

 
Посетитель
small user social cms
Сообщений: 4
Всем привет!

Итак, я пытаюсь сделать интеграцию поиска для своего (ну почти) компонента объявлений по этому мануалу.

В компоненте есть таблица, в которой хранится информация об объекте объявления, например, об инструменте. По этой таблице я и хочу сделать поиск.

Вот её структура:
Спойлер
Как видно из структуры, fulltext key следующий: `title`, `phone1`, `phone2`, `description`, `region_title`, `city_title`.

В файле psearch.php я пишу следующее:
Код PHP:
  1. <?php
  2. function search_instruments($query, $look){
  3.  
  4. $inDB = cmsDatabase::getInstance();
  5. $searchModel = cms_model_search::initModel();
  6.  
  7. // created_at НЕ fulltext index
  8. $sql = "SELECT `id`, `title`, `phone1`, `phone2`, `created_at`, `description`, `region_title`, `city_title`, `is_sell`
  9. FROM `icms_ads_units`
  10. WHERE MATCH(`title`, `phone1`, `phone2`, `description`, `region_title`, `city_title`) AGAINST ('$query' IN BOOLEAN MODE)";
  11.  
  12.  
  13. $result = $inDB->query($sql);
  14.  
  15. if ($inDB->num_rows($result)){
  16.  
  17. while($item = $inDB->fetch_assoc($result)){
  18.  
  19. $result_array = array();
  20.  
  21. $result_array['link'] = "/instruments/show/".$item['id'].".html";
  22. $result_array['place'] = "Инструменты";
  23. $result_array['placelink'] = "/instruments";
  24. $result_array['description'] = $searchModel->getProposalWithSearchWord($item['description']);
  25. $result_array['title'] = $item['title']." в г.".$item['city_title'];
  26. $result_array['pubdate'] = $item['created_at'];
  27. $result_array['session_id'] = session_id();
  28.  
  29. $searchModel->addResult($result_array);
  30. }
  31. }
  32.  
  33. return;
  34. }
  35. ?>
Запрос
SELECT `id`, `title`, `phone1`, `phone2`, `created_at`, `description`, `region_title`, `city_title`, `is_sell`
FROM `icms_instruments_units`
WHERE MATCH(`title`, `phone1`, `phone2`, `description`, `region_title`, `city_title`) AGAINST ('$query' IN BOOLEAN MODE)"
прекрасно работает сам по себе, если, например, запустить его в phpmyadmin. Вводишь вместо $query искомое слово, и если оно встречается в хотя бы одном поле из индекса, то запрос возвращает соответствующие записи.

Однако, при использовании на сайте через компонент поиска (поиск по нужному компоненту конечно активирован), результатов поиска нет. Моя ошибка явно в файле psearch.php. Но я уже все варианты перебрал, и никак не могу понять, в чём дело. Знатоки наверняка сразу увидят ошибку. Надеюсь.

Помогите, пожалуйста, разобраться, почему не работает поиск, что не так.
Редактировалось: 2 раз (Последний: 17 августа 2015 в 14:44)
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 684
Shaman, В админке то поиск по компоненту включили?
Реклама
cms
Посетитель
small user social cms
Сообщений: 4
WALTERZ, да, конечно.
Shaman:
поиск по нужному компоненту конечно активирован

В компоненте поиска в админке напротив нужного мне компонента стоит галочка. Также на странице поиска sitename.ru/search галочка стоит. Результатов возвращает 0. Хотя на самом деле этот же запрос, проведённый к базе напрямую, возвращает результаты.
Посетитель
small user social cms
Сообщений: 4
Как я заметил, во всех файлах psearch.php от разработчиков инстанта используются join'ы в запросах к БД. Может быть, дело в какой-то мистике, и если запрос без join'а (так как это попросту не нужно), то система волшебно перестаёт работать? laugh Смех смехом, но я уже столько времени безуспешно потратил на поиск решения, что начинаю верить в чудеса.

Очень надеюсь на помощь. Может, свежим взглядом получится найти причину.
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4359
Shaman:
используются join'ы в запросах к БД. Может быть, дело в какой-то мистике, и если запрос без join'а (так как это попросту не нужно), то система волшебно перестаёт работать?
из разряда если почесать правую ногу, то какой глаз будет дергаться при лунном свете.

Включите режим отладки в админке, скорее всего просто ошибка sql.

Если не поможет, то делайте отладку, вставляя print_r(); die; в местах кода, например перед
Код PHP:
  1. $searchModel->addResult($result_array);
вставляйте
Код PHP:
  1. print_r($result_array);die;
Если и в этом случае ничего не будет, то делайте в самом начале функции die($query);. В общем, стандартные процедуры отладки.
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
Сообщений: 4
Fuze:
из разряда если почесать правую ногу, то какой глаз будет дергаться при лунном свете.
Так а я о чём? laugh

Спасибо за рекомендации!

В общем, ответ найден. Префикс таблицы в запросе нужно оставлять, как указано в мануале, даже если в базе префикс таблицы другой. Инстант сам потом всё меняет. Вот так вот. Столько времени из-за незадокументированной в мануале особенности.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: