UMIhelp

Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: johnsmith от 27 Апреля 2016, 17:15:47

Название: Мультисайтовость + поиск
Отправлено: johnsmith от 27 Апреля 2016, 17:15:47
Здравствуйте!

Есть сайт(ы) на юми, в одной админке:
domain.ru
tema1.domain.ru
tema2.domain.ru
...
и т.д.

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

Спасибо!
Название: Re: Мультисайтовость + поиск
Отправлено: aghigay от 27 Апреля 2016, 18:15:26
Самый простой способ - использовать uhttp://tema2.domain.ru/udata/search/search_do/?search_string=... и интерпретировать результаты поиска по каждому домену отдельно.

В ЮМИ жестко прописан домен, который используется для поиска - это текущий домен, так что без изменения системных файлов тут особо не поиграешься.
Название: Re: Мультисайтовость + поиск
Отправлено: johnsmith от 28 Апреля 2016, 09:40:25
Благодарю за ответ!

... и интерпретировать результаты поиска по каждому домену отдельно.
Т.е. получить N поисковых выдач (N = число доменов) и среди этих выдач еще как-то сортировать результаты по релевантности?

В ЮМИ жестко прописан домен, который используется для поиска - это текущий домен, так что без изменения системных файлов тут особо не поиграешься.
Ok, если ковырять системные файлы, есть какие-нибудь подсказки - какие, где, как? ;-)
Название: Re: Мультисайтовость + поиск
Отправлено: aghigay от 28 Апреля 2016, 10:11:36
По сортировке и релевантности: я бы сказал, что все зависит от задачи. Если задача сводится к тому, чтобы перемешать все итоговые результаты - то да. А если можно представить дополнительные домены как разделы с поиском, типа "посмотрите еще и вот эти результаты" - то нет. Тут нужна конкретная детализация итоговой задачи.

По ковырянию системных файлов - /classes/system/subsystems/models/search/searchModel.php функция buildQueries строка $domain_id = cmsController::getInstance()->getCurrentDomain()->getId();
Но только я очень не рекомендую вам этого делать, ибо аукнется это все буквально через год
Название: Re: Мультисайтовость + поиск
Отправлено: e.ioffe от 29 Апреля 2016, 09:47:44
Я обычно копирую системный файл searchModel в /classes/modules/search/ext/searchModelCustom.php (в нем переименовываю класс searchModel на searchModelCustom), затем подключаю его в макросе поиска
public function search_doCustom($template = "default", $search_string = "", $search_types = "", $search_branches = "", $per_page = 0) {
// Код пропущен
searchModel::getInstance();
require_once CURRENT_WORKING_DIR. '/classes/modules/search/ext/searchModelCustom.php';
$result = searchModelCustom::getInstance()->runSearch($search_string, $search_types, $arr_search_by_rels, $orMode);
}

И дальше вношу все изменения в файл searchModelCustom.php
Название: Re: Мультисайтовость + поиск
Отправлено: aghigay от 29 Апреля 2016, 11:51:24
Результат хорош, но не до конца. В случае, если в ЮМИ решат, что функцию search_do нужно переписать - кастом все так же придется переделывать.

Так что при выборе решения внимательно смотрите на цели и на то, какой результат вы ожидаете получать
Название: Re: Мультисайтовость + поиск
Отправлено: e.ioffe от 29 Апреля 2016, 12:37:08
После обновления сравнить diff-ом два файла - дело одной минуты. Особенно, если есть IDE. На моей памяти функционал search_do кардинально не менялся последние два года.

Конкретно по этой задаче нужно убрать строчку 476 в файле с классом searchModelCustom:

s.domain_id = '{$domain_id}' AND

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

Цитировать
Так что при выборе решения внимательно смотрите на цели и на то, какой результат вы ожидаете получать

Также не стоит забывать о сопутствующих факторах, как то:
- производительность решения
- сложность дальнейшей поддержки
- полнота решения задач клиента
Название: Re: Мультисайтовость + поиск
Отправлено: aghigay от 29 Апреля 2016, 13:17:33
Полностью согласен с e.ioffe
Название: Re: Мультисайтовость + поиск
Отправлено: johnsmith от 05 Мая 2016, 17:57:14
Благодарю за помощь! Чтобы все заработало как мне надо, достаточно было удалить строку с "domain_id" (как написал e.ioffe).
Но только я очень не рекомендую вам этого делать, ибо аукнется это все буквально через год
А почему не рекомендуете? И почему именно через год? Слетит при обновлении? Или еще какие-то причины?

Возможно, после этого потребуется подправить код генерации ссылок (сложно сказать без боевого проекта).
Да, потребуется. Ссылки локального домена генерятся так: "/path/to/page/", остальные домены так: "http://domain.ru/path/to/page/". В принципе, ссылки корректны и работают. Проблема возникает только тогда, когда есть необходимость показать УРЛ красиво и полностью (т.е. неважно - локальный, нелокальный домен - чтобы УРЛ всегда был таким: "http://domain.ru/path/to/page/"). Как сообщество любителей ЮМИ посоветует обойти эту проблему?
Название: Re: Мультисайтовость + поиск
Отправлено: aghigay от 05 Мая 2016, 18:03:38
Через год - так как примерно за это время вы забудете где и что исправляли, случайно обновите ЮМИ и будете долго думать: как же теперь жить с результатами. Но для начала вам еще предстоит увидеть эту ошибку после обновления. А сделать это будет ОООООООчень непросто: результаты поиска ведь не всегда одинаковые :-)