В сто первый раз про маску телефонного номера

Про то, что в cs-cart нет нормально реализованного ввода телефонного номера (или про такую реализацию неизвестно из-за недостатков документации) не писал только ленивый.

Увы, придется написать еще раз.

  1. Почему при выборе единственной страны — России, при выборе российского города, cs-cart 4.11.4 SP 3 позволяет писать в поле телефонного номера нечто, что начинается на комбинации, недопустимые для России?

Это может быть как в теме от AB:

так и в коробочной теме:

Лирическое отступление: мы долго ***лись с проблемой получения валидного телефонного номера от клиента. Люди вводят вместо семерки восьмерку, например. Но какое-то решение в версии 4.9.3 мы придумали.

Примерно такое:

Screenshot_932

Может быть оно неидеально. Но будучи прикрученным к одностраничному чекауту полностью решило наши проблемы. Теперь все номер выглядят так:

Screenshot_933

Нет проблем с отправкой SMS, нет проблем при дозвоне.

Сейчас пытаемся перейти на версию 4.11.4

И снова ***тория :face_with_symbols_over_mouth:

Почему-то восьмерку не ввести — долой клиентов!
Зачем-то в шаблон номера вставлены скобки. Вы правда, думаете, что это красиво? Смотрите:

Читайте тут: Как писать телефонные номера. Про восьмёрку и скобки

Слева на скрине — как должен выглядеть красивый телефонный номер. Но клиент — еще тот специалист. Поэтому восьмерку шаблон тоже должен принимать и преобразовывать в +7 (для России).

Подведем итог:

  1. Прошу исправить косяк и оставить для России только один шаблон: +7 111 111-11-11

  2. По возможности было бы здорово, если бы в документации было написано, как пользователь cs-cart сам может отформатировать шаблон по своему разумению (мало ли, кому-то очень нужны скобки, а кому-то нет?)

  3. В валидаторе необходимо добавить преобразование восьмерки в +7 (для России).

Это когда-нибудь случится?

13 лайков

Надеемся и ждём.

По поводу +7: пришлось на сайте прописать образец заполнения
Скобки: смотрятся красиво, но при копировании полностью теряют смысл, еще приходится изощряться)))
Всегда должен быть выбор! хочешь поставить +7 - ставь, хочешь заполнение без скобок - пожалуйста. Я не программист, но неужели это так сложно сделать?

С обнимашками. Я)))

Вообще, в плане копирования удобнее всего номер без пробелов и чёрточек - щёлкнул 2 раза и ctrl+C.
Но для зрительного восприятия удобнее с разделителями.

Здравствуйте.

Сейчас логика такова, что пользователю доступны для ввода коды стран, которые включены в меню Администрирование > Доставка и налоги > Страны. Привязки к выбранному покупателем городу нет. Однако я воспроизвел проблему, при которой в текущей версии можно ввести коды, отличные от +7, когда среди всех стран включена только Россия. Это баг. Передал информацию разработчикам.

Что касается преобразования 8 в +7 для России - запрос на добавление этой фичи я оставлю, но это скорее к кастомной разработке. В качестве единого шаблона вы можете воспользоваться стандартной возможностью модуля Обратный звонок и задать нужный шаблон. В тултипе к настройке есть краткое описание и примеры. Прикрепляю снимок экрана.

Спасибо.

1 лайк

Во-первых, спасибо за ответ и надежду, что ошибка будет исправлена :slight_smile:

Но есть во-вторых :wink:

Что касается кода страны (а +7 — это международный код России, не так ли?), то нет такого кода страны — 8.

Отсюда следуем логике:

вариант а, правильный, но клиентам, возможно, неудобный: восьмерку запрещаем вводить на первом месте. Только семерку разрешаем. Результат? Потеря значащей цифры в конце телефонного номера.

вариант б, возможно, менее правильный с точки зрения формальной логики, но устраняющий недовольство клиентов и ошибки в телефонном номере — замена для России введенной на первом месте восьмерки в +7.

И небольшое дополнение: я писал про формат телефонного номера. В любом месте, а не в форме обратного звонка. Просто форма для иллюстрации. Намного важнее верный ввод номера телефона при оформлении заказа. Я так думаю.

5 лайков

Соглашусь с автором.
Я вижу проблему в том, что очень много Российских покупателей все еще ассоциируют 8 с международным кодом, так как в СССР через «восьмёрку» звонили не только в другие города и республики, но и забугор в социалистические страны, и продолжали звонить вплоть до 1999 года. Эта цифра так глубоко засела в подкорке, что должно смениться не одно поколение, прежде чем все устаканится.

Считаю, что надо подстраиваться не под формальные цифры, а прежде всего под потребности ЛЮДЕЙ, в данном случае покупателей. Даже если покупателю будет удобнее и проще вместо +7 поставить просто «ТОЧКУ», то надо дать ему такую возможность.

6 лайков

У ПЭК-а в старой форме предварительного оформления заявки хорошо реализовано. Просто любой телефон копируешь в поле (неважно, скобки, плюсы, чёрточки, восемь, семь), и он преобразовывает в человеческий формат. Очень удобно.

В любом случае, должна быть защита от дурака. Ну вводят люди “8” и их много таких, так давайте пойдём навстречу и сделаем им хорошо. Общее впечатление о магазине формируется из мелочей. Это неосознанно, но работает. Здесь капля негатива, там немного и всё, человеку подсознательно уже не комфортно покупать здесь. Он не осознанно это для себя решает, а вот просто расхотелось или отложил на попозже (никогда).

3 лайка

Здравствуйте, @lexizli .
Проблема исправлена, исправление войдет в релиз CS-Cart и Multi-Vendor 4.11.6
Для исправления проблемы собственными силами можно использовать патч:


О том, как применить патч, можно прочитать в нашей документации: https://www.cs-cart.ru/docs/latest/upgrade/apply_diff_file.html

7 лайков

Исправление проблемы предполагает возможность задать маску телефона? Например как в модуле обратный звонок. У меня все клиенты из России и я хочу чтобы маска сразу выдавала в начале поля не просто + ,а +7. Многие клиенты после плюса пытаются писать 8 или сразу код трехзначный, а маска не дает и в итоге в лучшем случае звонят что не могут указать телефон при заказе. Проблема на ровном месте

5 лайков

В настройках нужно выбрать

А в модуле Обратный звонок указать формат

Но этого бывает недостаточно. Видимо разработчики забыли добавлять data-атрибут к полю input при указанных вариантах настройки.
Поэтому нужно в шаблонах прописать у необходимых полей input этот атрибут data-enable-custom-mask="true"

Но это не решает проблему, дело в том, что часто пользователи в маску +7 (__) -- начинают вводить сначала 8 или 7 далее код 999 и номер 123-45-67, и получается +7 (899) 912-34-56 и одной цифры в конце не хватает.
Надо модифицировать js так, чтобы после заполнения маски, если пользователь вводит еще одну цифру, а первая введенная цифра 7 или 8, сдвигать все влево на 1 цифру, а 7 или 8 в начале удалять?

В одном интернет-магазине видел, что так работает маска.
Подсмотрел код - нашел такое
function(e, t, n) {
“use strict”;
Object.defineProperty(t, “__esModule”, {
value: !0
});
t.shiftPhoneCountryCode = function(e, t) {
var n = /^(8|7)/.test(t);
return 10 <= e.length && t && 10 !== t.length && n ? “” + e.slice(1) : e
}

Есть кто разбирается в js? Сможет прикрутить такое к CS-Cart? Цена вопроса?

Вот видео как это работает

Видео

1 лайк

Да тоже давно хочу поменять маску сделать ее более управляемой (.

Собственно вопрос к разработчикам тоже, может ли такой функционал войти в коробку?
@cs-cart_team

1 лайк

Только сегодня узнал о существовании такой проблемы с маской телефона.
Есть уже какое-то решение?
Главная проблема в том, то что если номер в международном формате, то цифры 8 просто невозможно ввести. Клиенты начинают набирать номер с 8, но в поле ничего не вбивается. Они бросают оформлять заказ, либо звонят.
Почему cs-cart в 2021 году году не в состоянии сделать нормальную маску телефона, которая уже есть чуть ли не на всех сайтах.

в настройка есть выбрать “Любые цифры и + -”, то буквы все равно можно вводить.

А это делали: в шаблонах прописать у необходимых полей input атрибут data-enable-custom-mask=“true” ?

нет. А где это нужно прописать?
Я так понимаю, это баг?

Подскажите, пож-ста, как поправить таки в 4.12.2 в Чекауте и в быстром заказе Юнитемы
Мне нужно +38 ХХХ ХХХ-ХХ-ХХ
Чтобы клиенты вводили только Х - цифры

1 лайк

А я хочу, чтобы номер телефона заполнялся в логике международного формата, но вместо +7 была только цифра 8, типа вот так: 8 (ХХХ) ХХХ-ХХ-ХХ
Причём, лучшим вариантом, было бы, если в поле ввода уже показывалась подсказка в том виде, в каком в итоге оно должно быть заполнено: 8 (123) 456-78-90

Почему бы не сделать настройки, чтобы каждый мог выбрать свой вариант заполнения поля с учётом кода своего региона или страны.