Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как кастомизировать функцию Битрикса

00 голосов
4
Необходимо внести изменения в api функцию CSearchTitle::Search модуля Поиск, как правильно ее кастомизировать. Заранее спасибо!
спросил 27 Апр, 13 от Emir (420 баллов)

4 Ответы

00 голосов
Воспользоваться механизмом событий.
ответил 27 Апр, 13 от Pomnep (13,960 баллов)
00 голосов
А событие для функции CSearchTitle::Search тоже OnSearch?
ответил 28 Апр, 13 от Emir (420 баллов)
00 голосов
CSearchTitle::Search() не имеет событий, к сожалению. Возможно, поможет событие OnBeforeIndex?
ответил 24 Июнь, 13 от Pomnep (13,960 баллов)
00 голосов
В том то и дело, что нет. Необходимо внести изменения в
Код
foreach(array_reverse($this->_arPhrase, true) as $word => $pos)
            {
                if(empty($sqlWords) && !preg_match("/[\\n\\r \\t]$/", $phrase))
                    $s = $sqlWords[] = "ct.WORD like '".$DB->ForSQL($word)."%'";
                else
                    $s = $sqlWords[] = "ct.WORD = '".$DB->ForSQL($word)."'";
                $sqlHaving[] = "(sum(".$s.") > 0)";
            }

заменить на
Код
foreach(array_reverse($this->_arPhrase, true) as $word => $pos)
            {
                if(empty($sqlWords) && !preg_match("/[\\n\\r \\t]$/", $phrase))
                    $s = $sqlWords[] = "ct.WORD like '".$DB->ForSQL($word)."%'";
                else
                    $s = $sqlWords[] = "ct.WORD like '".$DB->ForSQL($word)."%'";
                $sqlHaving[] = "(sum(".$s.") > 0)";
            }

т.е. чтобы если в поисковом запросе есть несколько частей слов из поискового индекса, они также находились, сейчас ищет по части слова только, если оно первое в строке поиска.
Как корректнее это сделать не знаю
ответил 28 Сен, 13 от Emir (420 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
7 ответов
спросил 26 Авг, 13 от Kirora (180 баллов)