Поиск по стороннему компоненту? Icms2+

#1 9 ноября 2015 в 17:13
Предусмотрено ли в двойке использование системного поиска в своем компоненте?
#2 9 ноября 2015 в 18:09
kreator, я ковырял поиск. Он ищет только по типам контента.

В теме пожеланий я просил добавить хук в экшн поиска, тогда можно было бы добавлять свои результаты в $results[].

Но пока тишина…
#3 9 ноября 2015 в 18:25
Не пробовал конечно, но не то?
#4 9 ноября 2015 в 18:44

Он ищет только по типам контента.

Zau4man
Теги тоже зависимы от типов контента :(
#5 9 ноября 2015 в 19:04
kreator, Только если экшен свой будет.

Общий поиск сейчас завязан на схожих таблицах для компонентов. Поэтому по ним и ищет. Если у вас таблица различается, то придется делать свой поиск
#6 10 ноября 2015 в 11:52

Если у вас таблица различается, то придется делать свой поиск

kirkr
так ведь никто не против сделать свой. Но нужно эти результаты показывать пользователю. А значит нужен

хук в экшн поиска, тогда можно было бы добавлять свои результаты в $results[]

Zau4man
#7 10 ноября 2015 в 13:55
Zau4man, либо отдельный поиск для компонента и виджет выводить на главной странице.
#8 10 ноября 2015 в 17:22
kirkr, а как юзеру объяснить, что на сайте два поиска?)
#10 10 декабря 2015 в 13:49
Поиск по всем полям сторонник компонентов?
Сегодня вечером залью проверю.
#11 10 декабря 2015 в 16:58

Поиск по всем полям сторонник компонентов

kirkr
это как вы в своем компоненте сделаете. чуть позже напишу документацию, а пока смотрите фронтэнд компонента поиск. там добавлен хук и еще много всего. возникнут вопросы, задавайте.
#12 11 декабря 2015 в 17:31
Fuze, качаю, отпишу завтра.
#13 15 декабря 2015 в 21:07
так. Создал свой хук. Код черновой.

  1. <?php
  2.  
  3. class onAfishaFulltextSearch extends cmsAction {
  4.  
  5. public function run($data){
  6.  
  7. list($model, $ctype) = $data;
  8.  
  9.  
  10. $sql_fields = array('event', 'info');
  11. $default_fields=array('id','id','date');
  12. $results_count = $model->getSearchResultsCount('afisha_events', $sql_fields, $default_fields);
  13.  
  14. if ($results_count){
  15.  
  16. $result = $model->getSearchResults('afisha_events', $sql_fields, $default_fields);
  17.  
  18. }
  19.  
  20. $results[] = array(
  21. 'title' => 'Афиша',
  22. 'name' => 'afisha',
  23. 'items' => $result,
  24. 'count' => $results_count
  25. );
  26.  
  27. return $results;
  28.  
  29. }
  30.  
  31. }
  32.  
Как компонент поиска что-то найдет, если в getSearchSQL идет две жесткие привязки в запросах

  1. $sql = "SELECT {$select_fields}
  2. FROM cms_{$table_name}
  3. WHERE is_pub = 1 AND MATCH({$sql_fields}) AGAINST ('{$query}' IN BOOLEAN MODE)
  4. ";
и
  1. if ($this->date_interval != 'all'){
  2.  
  3. switch ($this->date_interval){
  4. case 'w':
  5. $sql .= "AND DATEDIFF(NOW(), date_pub) <= 7 \n";
  6. break;
  7. case 'm':
  8. $sql .= "AND DATE_SUB(NOW(), INTERVAL 1 MONTH) < date_pub \n";
  9. break;
  10. case 'y':
  11. $sql .= "AND DATE_SUB(NOW(), INTERVAL 1 YEAR) < date_pub \n";
  12. break;
  13. }
  14.  
  15. }
к полям is_pub и date_pub. Их у меня нет. is_pub можно создать. Но тогда не понятно, зачем задавать $default_fields.

Тапками прошу не кидаться, я может не совсем понял назначение методов в модели поиска.
#14 15 декабря 2015 в 22:08

Как компонент поиска что-то найдет, если в getSearchSQL идет две жесткие привязки в запросах

Zau4man
дело в том, что системный поиск использует поле даты. В поисковой форме есть выбор интервала. Соответственно поле date_pub должно быть и у вас.
По полю is_pub согласен, уберу его, сделаю более универсально.

зачем задавать $default_fields

Zau4man
Они для выборки
#15 15 декабря 2015 в 22:16

date_pub должно быть и у вас.

Fuze
не. я о том, что у меня, в частности, поле называется просто date. Можно ли в системном поиске проверять, заполнены ли $default_fields и, если заполнены, искать по их названиям, а не по date_pub?
Так, я понял. А может добавить универсальности с возможностью указать свое название поля даты?

И еще. Что-то надо делать с выводом результатов в шаблон. Там кругом нужен ctype_name.
В итоге получаем ошибку

  1. Warning: Invalid argument supplied for foreach() in Z:\home\instant2test2\www\templates\default\controllers\search\index.tpl.php on line 67
так как результаты поиска вроде бы есть, но они отсекаются при переборе.

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