Как использовать функцию поиска и смены раскладки в Bitrix?

Как мне добавить исключения в поиск битрикса, чтобы избежать смены раскладки для слова "КЭН"? Хочу сохранить функцию смены раскладки, но избежать поиска некорректных результатов. Кто-нибудь сталкивался с подобной проблемой и знает решение?
Изображение к вопросу
  • 11 октября 2023 г. 9:00
Ответы на вопрос 3
В Bitrix для использования функции поиска и смены раскладки можно воспользоваться методом `CSearch::ConvertKeyboardLayout($str)`. Он преобразует переданную строку `$str` в транслит или изменяет раскладку на латиницу в соответствии с текущей настройкой.

Чтобы добавить исключения в поиск Bitrix и избежать смены раскладки для слова "КЭН", вам необходимо изменить файл `/bitrix/modules/search/classes/mysql/mysql.php`. В нем найдите функцию `function SetMatchQuery`, и перед условием `$sQuery .= "AND ";`, добавьте проверку на исключение:

```php
if (ToLower($word) === "кэн") {
    // Пропустить проверку и добавить слово в запрос без изменения
    continue;
}
```

В итоге, ваш код должен выглядеть примерно так:

```php
protected function SetMatchQuery($sQuery, $sWords, &$arSql, &$bIncSites)
{
    ...
    foreach ($arWords as $mkey => $text)
    {
        if(strlen($text)>0)
        {
            $wordInLowerCase = ToLower($text);
            // Проверка на исключение
            if ($wordInLowerCase === "кэн") {
                // Пропустить проверку и добавить слово в запрос без изменения
                continue;
            }

            // Другой код обработки слов
            ...
        }
    }
    ...
}
```

После внесения этих изменений, слово "КЭН" будет добавлено в поиск без изменения раскладки, и функция смены раскладки будет сохранена для других слов.

Обратите внимание, что данное решение является неподдерживаемым изменением ядра Bitrix и может быть затерто при обновлении системы. Поэтому, перед внесением изменений, рекомендуется создать копию файла и делать все изменения на свой страх и риск.
Битрикс не предоставляет полноценного словаря. Существует недоработанная функция, например spellchecker в модулях, но она несовершенна (встроенный словарь). Рекомендую искать решение с использованием Sphinx и API Битрикс для проверки слов. Также можно разработать собственное решение на базе библиотеки pspell для PHP или программы aspell для Linux. 


Необходимо использовать Sphinx вместе с API битрикса, чтобы проверять правильность написания слов. Есть встроенная функция spellchecker в модулях Битрикса, но она не доработана и содержит минимальный словарь. Рекомендуется разработать свое собственное решение, основанное на библиотеке pspell для PHP или программе aspell для Linux.
Похожие вопросы