Shaman

Shaman

+9
Репутация
0
Рейтинг
#1 [ЕСТЬ РЕШЕНИЕ] Интеграция поиска в компонент InstantCMS 1.10.4+ 17 августа 2015 в 20:56

из разряда если почесать правую ногу, то какой глаз будет дергаться при лунном свете.

Fuze
Так а я о чём? laugh

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

В общем, ответ найден. Префикс таблицы в запросе нужно оставлять, как указано в мануале, даже если в базе префикс таблицы другой. Инстант сам потом всё меняет. Вот так вот. Столько времени из-за незадокументированной в мануале особенности.
#2 [ЕСТЬ РЕШЕНИЕ] Интеграция поиска в компонент InstantCMS 1.10.4+ 17 августа 2015 в 13:42
Как я заметил, во всех файлах psearch.php от разработчиков инстанта используются join'ы в запросах к БД. Может быть, дело в какой-то мистике, и если запрос без join'а (так как это попросту не нужно), то система волшебно перестаёт работать? laughСмех смехом, но я уже столько времени безуспешно потратил на поиск решения, что начинаю верить в чудеса.

Очень надеюсь на помощь. Может, свежим взглядом получится найти причину.
#3 [ЕСТЬ РЕШЕНИЕ] Интеграция поиска в компонент InstantCMS 1.10.4+ 17 августа 2015 в 13:35
WALTERZ, да, конечно.

поиск по нужному компоненту конечно активирован

Shaman

В компоненте поиска в админке напротив нужного мне компонента стоит галочка. Также на странице поиска sitename.ru/search галочка стоит. Результатов возвращает 0. Хотя на самом деле этот же запрос, проведённый к базе напрямую, возвращает результаты.
#1 [ЕСТЬ РЕШЕНИЕ] Интеграция поиска в компонент InstantCMS 1.10.4+ 17 августа 2015 в 00:21
Всем привет!

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

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

Вот её структура:
  1. `icms_ads_units` (
  2. `id` int(10) NOT NULL AUTO_INCREMENT,
  3. `title` varchar(80) NOT NULL,
  4. `id_owner` int(10) NOT NULL,
  5. `phone1` varchar(20) NOT NULL,
  6. `phone2` varchar(20) NOT NULL,
  7. `created_at` datetime NOT NULL,
  8. `description` text,
  9. `region_id` int(10) NOT NULL,
  10. `region_title` varchar(100) NOT NULL,
  11. `city_id` int(10) NOT NULL,
  12. `city_title` varchar(80) NOT NULL,
  13. PRIMARY KEY (`id`),
  14. FULLTEXT KEY `title` (`title`, `phone1`, `phone2`, `description`, `region_title`, `city_title`)
  15. ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
Как видно из структуры, fulltext key следующий: `title`, `phone1`, `phone2`, `description`, `region_title`, `city_title`.

В файле psearch.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. Но я уже все варианты перебрал, и никак не могу понять, в чём дело. Знатоки наверняка сразу увидят ошибку. Надеюсь.

Помогите, пожалуйста, разобраться, почему не работает поиск, что не так.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.