progcode_D / PHP / WEB

Bitrix

Bitrix API. Функция для генерации кода элемента из имени через транслит

Пример CUtil::translit для символьного кода элемента с ограничением длины и отдельной проверкой пустого результата и уникальности.

Символьный код элемента часто получают из русского названия: приводят к нижнему регистру, заменяют пробелы и убирают повторяющиеся разделители. Для такой операции в Bitrix есть CUtil::translit. Это преобразование строки, а не гарантия уникального кода в инфоблоке.

Функция преобразования

function strToElementCode($str, $maxLength = 100) {
    if ($maxLength < 1) {
        throw new InvalidArgumentException('maxLength must be positive');
    }
    return CUtil::translit($str, 'ru', [
        'max_len' => $maxLength,
        'change_case' => 'L',
        'replace_space' => '_',
        'replace_other' => '_',
        'delete_repeat_replace' => true,
    ]);
}

Функция рассчитана на подключённое окружение Bitrix. Настройки перечислены в справочнике CUtil::translit. Параметр use_google из старого варианта не нужен для приведённого контракта и здесь исключён. Для логических значений используйте true/false, а не строки: строка "false" не является булевым false.

Пустой результат и совпадения

Разные названия могут дать один код, а строка из неподдерживаемых символов — пустой результат. После транслитерации проверьте эти случаи в той области, где код должен быть уникален. При необходимости добавляйте стабильный суффикс из идентификатора элемента, оставляя место под него в ограничении длины. Не используйте случайный суффикс при каждом повторном импорте: иначе адрес будет меняться.

$code = strToElementCode($name);
if ($code === '') {
    throw new RuntimeException('Не удалось получить символьный код');
}
// Далее — проверка уникальности по правилам вашего инфоблока.

Транслитерация не заменяет проверку пользовательского ввода и экранирование при выводе кода в HTML или URL.

КОНЕЦ ЗАМЕТКИ↑ В начало