Доработать маску (плейсхолдер) телефона в ядре Карта

у меня клиенты часто пишут номер с первой цифрой 8 и естественно номер обрезается в конце , и получается что-то типа +7(892)6111111 т.е. нет последней цифры = номер не правильный= лид упущен, можно ли как-то наколдовать что бы ,если введена первая цифра 8 , то она удалялась, или что бы номер где вторая цифра после +7 идет 8 ,считался неправильным и не давал завершить оформление

1 лайк

Как то не работает.
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5|690x218
Кеш карта чистил
Кеш браузера чистил и отключал и в анонимном режиме загружался
кеш статических фалов ЗахидХоста тоже отключал
может путь не тот или еще что-то?
Хелп плиз.

каждись понял. не подключил…

Я решил это кардинальным способом, потому как номера обрезаются бывает и из-за кривого автозаполнения (на iOS, например, который заполняет номер с +7 и дублирует лишнюю 7).

В скрипте надо заменить строку с маской на mask: '+7(X99)999-99-99', и в конце дописать условие:

definitions: {
    'X': {
        validator: "9"
    }
}

Полный пример скрипта:

$(document).bind('ready ajaxComplete', function(){
    $('input[type="tel"]').inputmask({
        mask: '+7(X99)999-99-99',
        placeholder: '_',
        showMaskOnHover: false,
        definitions: {
            'X': {
                validator: "9"
            }
        }
    });
});

В РФ префиксы мобильных номеров начинаются всегда с 9 у всех операторов. После этой правки ввести первой цифрой ничего кроме 9 нельзя. Проблемы с автозаполнением тоже решились.

Больше с проблемой некорректных номеров в заказе мы с тех пор не сталкивались, хотя до этого такое было часто.

6 лайков

Получилось решить? Я именно таким способом подключаю маску – ссылку на js-файл в scripts.post.tpl (как и многие другие скрипты).

1 лайк

дада. все норма. три раза перечитал, а про подключить не увидел ))) спасибо!

1 лайк

Новая проблема вылезла.
вводим, нажимаем поиск
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

получаем
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5
еще раз поиск
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

т.е. уезжает вправо.
как-то можн это победить?

С таким не сталкивался, проверил сейчас. Но может это из-за того, что первая цифра префикса у меня только 9, поэтому номер “съехать” не может.

Забавное поведение, конечно. Даже нет мыслей, почему такое может происходить.

upd: это из-за того, что js-скрипты применяются через какое-то время после загрузки страницы.

То есть нажав “Поиск” происходит обновление страницы и при её загрузке скрипт еще не применился к полю, но в поле есть номер без формата +380951234567, и как только происходит подгрузка js-скрипта, накидывается маска и формирует цифры в поле под неё – отсюда и появляются лишние 38, обрезая конец номера.

Можно загружать скрипты до загрузки содержимого страницы и после загрузки jquery, но это надо смотреть детально.

Вы правы, с валидатором все норм.
Подскажите еще пожалуйста как в my_changes затереть этот файл
/js/lib/inputmask-multi/phone-codes.json
т.к. в нем надо изменить для Украины иначе почему-то глючит иногда , не дает сохранять
“mask”: “+38(###)###-##-##”

а то сейчас сделаю и забуду, что его менял, а какая то обнова затрет

@AndreyJ , эта библиотека подключается в app/functions/fn.common.php, в функции fn_get_phone_masks. Эту функцию ядра нельзя переписать своими изменениями, к сожалению.

Сама библиотека на github обновлялась последний раз 4 года назад.

Правьте напрямую phone-codes.json, вряд ли в нем будут изменения в ближайшее время.

А если в обновлении CS Cart и будет апдейт этого файла – вы не сможете продолжить обновление, пока не поставите галку согласия, что этот файл будет перезаписан, после чего будет сделана его копия, чтоб можно было применить правку в обновленном файле. В этом плане есть продуманность у CS Cart.

1 лайк

то что нужно ,спасибо )

1 лайк

у меня конфликт поля из-за класса этого http://joxi.ru/l2ZZ9pEHEwLxj2

вот это тоже сделайте.
и кеш чистите.
у меня теже симптомы были

вот обратите внимание на вашем же скрине
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

В коробке такого класса на поле нет:

Может модуль какой накидывает его, из-за чего и конфликтует.

upd: просмаркал, этот класс есть, если в настройках установлено “Номер в международном формате”. Надо проверить еще раз настройку, если изменить её – класс уходит.

он тут есть
/js/tygh/phone_mask.js
правда я не понимать, что он делает, но вы наверняка раберетесь

и настройку эту включал… а он все равно ошибку светил эту, пока в файле не поменял
мне почему то кажется из-за того, что уже были ранее созданы юзеры с номером в формате ином, где только две цифры в скобках 9(99) а не (999)

е"

Да, перепроверил. Он как раз и накидывает форматы из библиотеки inputmask-multi, как я понял, поэтому кастомная маска будет конфликтовать.

Решается только изменением настройки “Допустимые номера телефонов” в Настройки - Внешний вид на “Любые цифры и ±()”.

Выше ссылку на демку кидал, там я добавил маску в scripts.post.tpl и настройку изменил – оформление заказа с +38(ХХХ) не выдает ошибку. Все косяки из-за класса js-mask-phone-inited происходят.

это жесть - у меня ни при каких настройках эта хрень не исчезает из стиля. буду копать дальше

@vetalm, думаю, вам поможет решение выше. Найдите файл /js/lib/inputmask-multi/phone-codes.json и в нем удалите строку:

{ "mask": "+380(##)###-##-##", "cc": "UA", "name_en": "Ukraine", "desc_en": "", "name_ru": "Украина", "desc_ru": "" },

Либо замените её на:

{ "mask": "+38(###)###-##-##", "cc": "UA", "name_en": "Ukraine", "desc_en": "", "name_ru": "Украина", "desc_ru": "" },

Второй вариант, на крайний случай – можно немного костыльнуть и принудительно удалять этот класс у поля. Надо добавить в скрипт маски строку:

$('.litecheckout__input.phone.cm-mask-phone').removeClass('js-mask-phone-inited');

Пример (с валидатором первой цифры префикса как 0):

<script>
$(document).bind('ready ajaxComplete', function(){
    $('.litecheckout__input.phone.cm-mask-phone').removeClass('js-mask-phone-inited');
    $('input[type="tel"]').inputmask({
        mask: '+38(X99)999-99-99',
        placeholder: '_',
        showMaskOnHover: true,
        definitions: {
            'X': {
                validator: "0"
            }
        }
    });
});
</script>

Проверил этот вариант, класс удаляется и ошибка формата номера не появляется.

эти не помогли ((( последний уже завтра поковыряю.
Спасибо за помощь!

1 лайк

Только этот вариант сработал, спасибо.
Что интересно - я изменил в файле /js/lib/inputmask-multi/phone-codes.json строку
{ “mask”: “+38(###)###-##-##”, “cc”: “UA”, “name_en”: “Ukraine”, “desc_en”: “”, “name_ru”: “Украина”, “desc_ru”: “” },
Ничего не произошло, а вот в один клик такое поведение без модуля маски http://joxi.ru/LmGoXkOhJYKoYm

Беда. При редактировании заказа клиента - не даёт ввести код +44 (Великобритания есть в списке стран). Где это регулируется вообще?