Как сделать проверку символов телефона 1с битрикс
Про защиту от спама в регистрации без включения капчи я уже рассказывал. На очереди борьба с ботами в модуле Веб-формы в битриксе, а так же расскажу как написать свой валидатор.
Защищаться будем по схеме, описанной в заметке про регистрацию, а именно: добавляем в форму невидимое поле, если поле заполнено — к нам пришёл бот.
Предположим, форма у вас создана, поля(в понятии модуля форм — «вопросы») для неё заведены и настроены. Заведём ещё одно, служебное, с типом text (поля типа hidden боты иногда игнорируют и не заполняют). В свойствах «Символьный идентификатор» ему надо придумать, как обычному полю, например user или name. Не стоит называть его antibot.
В поле «Текст ответа» чтобы не писать название, можно считерить и вписать неразрывный пробел (в юникоде: Alt + 0160).
Как вы помните, нам нужно проверять поле на пустоту. По умолчание доступны валидаторы:
- [number_ext] Число в пределах
- [text_len] Длина строки
- [number] Целое число
- [INN] Проверка ИНН
Вроде бы подходит валидатор text_len. У него в настройках есть 2 параметра: «Минимальная длина», «Максимальная длина». Но для настройки «Максимальная длина» минимум можно указать 1, а нам нужно 0. Можно поставить и 1, но я решил написать свой валидатор, тем более, что я никогда этого не делал.
Документация по написанию своих валидаторов тут. Там всё просто: пишем PHP-класс с нужными методами и подвешиваем его на нужное событие.
Получился вот такой класс валидатора:
Положил я его по пути: /bitrix/php_interface/handlers/form_validator_string_empty.php
Ну а подключить его нужно в файле /bitrix/php_interface/init.php
После этого у поля на вкладке «Валидаторы» появится новый валидатор «[empty_string] Пустая строка»:
Его-то и нужно добавить к нашему полю для защиты от спама.
Последнее что осталось: скрыть это поле через CSS, чтобы пользователи его не видели.
Похожие записи
1С-Битрикс. LazyLoad или ленивая загрузка контента при включенном кешировании
В этой заметке я хочу рассказать о технологии LazyLoad или в простонародье «ленивая загрузка» в Битриксе. Метод, описанный мной, будет точно работать в компонентах catalog.section и news.list.
1C-Битрикс. Кастомизация нового шаблона компонента sale.order.ajax
С выходом нового шаблона компонента sale.order.ajax на форумах битрикса разгораются возмущения и недомения. Мол, теперь код всего шаблона на JavaScript и как его кастомизировать непонятно. На самом деле да, код js-скрипта составляет почти семь тысяч строк. Сходу в таком количестве кода, даже хорошо написанного (к сожалению, битрикс этим не балует), соблюдая паттерны программирования, будет непросто.
В этой заметке я покажу способ, как можно кастомизировать основной скрипт логики шаблона оформления заказа (order_ajax.js), не прибегая к его правке. Что нам это даёт? Когда прилетят очередные обновления шаблона, мы просто заменим его и всё. Все наши кастомизации будут работать (в теории).
1С-Битрикс. Пишем человеческий шаблон многоуровнего меню каталога
Не буду писать про боль при интегации дефотного шаблона. Давайте просто напишем свой, с блекджеком и вот этим всем.
Валидатор представляет собой класс или набор функций следующей структуры:
Метод | Описание |
---|---|
Описание валидатора | Функция, передающая обработчику валидаторов описание валидатора, названия методов и пр. |
Настройки валидатора | Функция, возвращающая массив настроек валидатора. |
Обработка настроек | Набор функций, отвечающий за подготовку настроек к занесению в БД и обратное преобразование. |
Функция валидации | Собственно, валидатор. |
Поскольку работать с набором отдельных функций неудобно, рекомендуется объединить их в класс (пространство имен). Исходя из этой рекомендации будет идти дальнейшее описание, а также, реализован приводимый пример. В примере валидатор "Число в промежутке" реализован в виде класса CFormCustomValidatorNumberEx .
Описание валидатора
Описание валидатора представляет собой метод, возвращающий ассоциативный массив следующей структуры:
Параметр | Описание |
---|---|
NAME | Уникальный строковой идентифкатор валидатора. |
DESCRIPTION | Название валидатора. |
TYPES | Массив типов полей, к которым применим валидатор. |
SETTINGS | Название метода, возвращающего массив настроек валидатора. Не обязателен. В случае реализации валидатора в виде класса, значение представляет собой массив ("имя_класса", "имя_метода"). |
CONVERT_TO_DB | Название метода, отвечающего за проверку параметров валидатора и преобразование массива настроек в строку для сохранения. Не обязателен, если валидатор не имеет настроек. В случае реализации валидатора в виде класса, значение представляет собой массив ("имя_класса", "имя_метода"). |
CONVERT_FROM_DB | Название метода, отвечающего за обратное преобразование строки параметров валидатора в массив. Не обязателен, если валидатор не имеет настроек. В случае реализации валидатора в виде класса, значение представляет собой массив ("имя_класса", "имя_метода"). |
HANDLER | Название основного метода, отвечающего собственно за валидацию значения поля. В случае реализации валидатора в виде класса, значение представляет собой массив ("имя_класса", "имя_метода"). |
Параметры валидатора
Метод, заданный элементом SETTINGS , должен возвращать массив элементов вида:
- TEXT - обычное текстовое поле;
- CHECKBOX - галочка. Результатом будет значение
; - DROPDOWN - выпадающий список;
- DATE - поле для ввода даты.
Обработка параметров
Обработка параметров валидатора требует двух методов, задаваемых в описании параметрами CONVERT_TO_DB и CONVERT_FROM_DB . Первый из них получает на вход массив значений параметров и должен вернуть их строковое представление. Второй - совершить обратное преобразование. Оба метода могут также совершать произвольные манипуляции со значениями параметров.
Валидатор
Интеграция валидатора
Класс валидатора должен подключаться в любом месте, в котором он будет доступен из административной панели и в публичной части (подробнее см. порядок выполнения страниц), например, в /bitrix/php_interface/init.php. Непосредственно, файл валидатора может находиться где угодно, например, в /bitrix/php_interface/include/form/validators/. Подключение валидатора производится установкой описательной функции валидатора в качестве обработчика события onFormValidatorBuildList .
Пример
Подытожив все вышесказанное, сформируем валидатор. Класс валидатора расположим в файле /bitrix/php_interface/include/form/validators/val_num_ex.php
После этого остается только вставить в /bitrix/php_interface/init.php строку
Забыли ввести поле, некорректный e-mail — все это проверяется уже после отправки. А хотите на лету? Тогда мой новый модуль вам в помощь!
Более того, модуль дает вам возможность писать свои валидаторы на совершенно любое поле. Например, номер телефона — этого нет в Битрикс штатно ни в какой форме. А у меня есть
Давайте пробежимся по картинкам, чтобы было проще и понятнее. Либо можете сразу перейти к демо — перейдите к оформлениею заказа и поиграйтесь с полями. Особо попробуйте повводить номер телефона.
Понравилось? Давайте покупать и ставить
Сразу хочу сказать, что модуль только для одношаговой формы заказа. Рекомендую до покупки поставить демо и просто попробовать.
На самом деле я приложил максимум усилий, чтобы настраивать не пришлось вообще ничего. Просто включаете модуль, и он уже готов к работе. То есть не требуется даже кастомизация шаблона. Но конечно есть разные дизайны, разные формы, и иногда нужно что-то подкрутить. Давайте это рассмотрим.
И там правим стили, видя как иконка сразу встает на нужное место:
Но что если телодвижения такие не помогают, и нет-нет, да перекашивает. Тогда, к сожалению, надо внедрять вручную:(Кастомизируете шаблон оформления заказа (этот момент я упущу), и в файле шаблона props.php в самом верху пишите такую функцию.
А в нужном месте уже вставляете вызов функции, передавая ей ID (именно ID!) свойства.
Я не смогу всем конечно помочь, но если у вас есть коротенечкий вопрос, и не получается совсем чуть-чуть — напишите мне , что-нибудь придумаем.
Перейдем к написанию собственного валидатора
На первых скринах вы видели, как модуль ловко проверяет номер телефона. Как его научить? А легко и просто — достаточно написать свой обработчик события вот такого формата:
Нашли ошибку? Выделите мышкой и нажмите Ctrl+Enter
Настройки валидации ввода
Валидация ввода – это комплекс мер по пресечению ввода неправильной информации в интерактивной форме (например, в формах обратной связи). Существует для того, чтобы клиент вводил точные данные, например, корректно вводил номер телефона (лишь цифрами и в определенном формате).
Настройка валидации ввода позволяет задавать для форм обратной связи такие параметры, как маска валидации, формат ввода телефонных номеров, вывод капчи в формах для защиты от спама, формат даты.
«Использовать капчу в формах» (1).
Captcha (или капча) – это автоматически появляющийся текст, который необходимо ввести пользователю в специальное окно. Используется для защиты от автозаполнения форм.
Внимание! Активация механизма CAPTCHA резко снижает конверсию форм, мы не рекомендуем включать данный параметр без необходимости.
Как заменить маску телефона для других стран читайте здесь.
«Маска телефона для валидации» (3) позволяет задать регулярное выражение для проверки корректности ввода номера телефона в формах обратной связи.
Внимание! Маска телефона должна соответствовать маске телефона для валидации, иначе пользователь не сможет заполнить форму обратной связи.
Пример маски телефона для валидации:
- Для России и Казахстана: ^[+]3 [(]3[)] 8[-]6[-]9$
- Для Украины: ^[+]5 7 2 1$
«Формат даты» (4) позволяет определить корректность ввода даты в формах обратной связи. Опция работает в браузерах, не поддерживающих HTML5 input[type=date], например Firefox, для остальных браузеров формат даты в этом поле зависит от локализации браузера.
Настройка «Возможных расширений файлов для валидации»(5) позволяет указать разрешенные для загрузки документы через формы обратной связи. Необходимо указать все расширения через вертикальный разделитель.
Например, значения по умолчанию: png|jpg|jpeg|gif|doc|docx|xls|xlsx|txt|pdf|odt|rtf
Если имя файла имеет расширение в верхнем регистре, 1С-Битрикс может не разрешить его загрузку, поэтому рекомендуется использовать расширения файлов в нижнем регистре.
Не сохранилась половина статьи про исключения ….(( а написал много. Поэтому пока их отложу, а напишу про битрикс.
Несмотря на весь тот свод правил, которые предлагает нам битрикс, можно организовывать хранение своего кода по разному. В статье я постараюсь предложить варианты, который хотел бы видеть в проектах, с которыми работаю. Он не идеален, он не панацея, доступен для обсуждения, я всегда открыт для ваших предложений.
Что нам предлагает битрикс
Слава разработчикам, что они наконец-то начали отделять код ядра от кода разработчиков. С 12й версии битрикс появилась возможность использовать директорию /local (более полная поддержка пришла с 14й версией). Данная директория должна находиться в корне сайта. По структуре она полностью повторяет структуру директории /bitrix, за тем исключением, что в ней нет файлов ядра (встроенных модулей, компонентов и т.д.). Что же может содержать в себе директория /local? Основываясь на статье перечисляю поддерживаемые вложенные директории:
- /local/activities — действия из модуля бизнес-процессов
- /local/components — сторонние компоненты
- /local/gadgets — гаджеты для рабочего стола админки
- /local/modules — сторонние модули
- /local/php_interface — работает только init.php и директория user_lang (для подмены языковых файлов)
- /loca/templates — шаблоны сайта
Директория local имеет приоритет перед /bitrix, т.ч. при одинаковых именах файлов будет использован вариант из /local.
Шаблон сайта
Вроде все базово, все и всё знают, однако сколько проектов ни видел, нигде нет единого варианта. Шаблон сайта должен находиться в директории /local/templates/. Структура файлов директории с шаблоном сайта достаточно подробно расписана тут, а я все-таки остановлюсь немного подробнее на нескольких файлах:
-
header.php и footer.php. Пожалуйста — не стоит размещать в них логику. Только в самых крайних случаях. Надо понимать — что это файлы шаблонов — а в шаблонах должны быть только шаблоны, и ничего более. Тупой пример с одного из проектов, где в header.php определяется тип пользователя. Мало того, что логика в шаблоне, так и код еще ужасный:
Компоненты, свой — чужой
Также, разработчики часто забывают про возможности ООП внутри компонентов. Если кто не знает, то уже давно внутри компонента можно создать файл class.php, который должен содержать класс, унаследованный от CBitrixComponent.
Благодаря этому можно использовать наследование классов других компонентов при создании своих — иногда это очень полезный инструмент. Подробнее — тут.
Перед тем, как кастомизировать встроенный компонент — нужно 1000 раз подумать, а действительно ли он не соответствует вашим требованиям? Может вместо копирования встроенного компонента лучше прибегнуть к написанию собственного? Если вы все-таки решили скопировать встроенный компонент, то обязательно документируйте, что и где вы изменили внутри этого компонента, это сильно поможет другим разработчикам, а также поможет при обновлении компонентов при обновлении ядра.
Собственные и сторонние классы, библиотеки
Я предлагаю для хранения библиотек и классов завести директорию /local/lib. Для php библиотек — /local/lib/backend, для js — /local/lib/frontend
Внутри директории для php библиотек можно хранить библиотеки и классы по типу, описанному в одной из моих статей. В идеале — приводить свои библиотеки к виду, регламентируемому замечательным composer (про него когда-нибудь тоже напишу).
Каждая js библиотека должна храниться в отдельной директории, т.к. для библиотеки часто в комплекте может идти несколько css файлов, map, или еще чего. Ну и удобнее так будет, ибо нужно хранить и исходник файла, и его минифицированную версию.
Для конфигураций предлагаю создать директорию /local/config, внутри которой вижу следующие файлы:
- const.php — константы вашего проекта
- events.php — вызовы AddEventHandler для всех возможных кастомных обработчиков событий проекта.
- frontend.php — регистрация js библиотек из /local/lib/frontend/ — об этом ниже
Не нужно подключать все свои js файлы прямым включением в шапку сайта. Для подключения js файлов в битриксе есть добротный класс CJSCore. Можно зарегистрировать все свои js библиотеки, и подключать их строго на нужных страницах. Для регистрации библиотек используем файл, который должен быть подключен на всех страницах нашего проекта — /local/config/frontend.php
Ниже в примере показано, как зарегистрировать библиотеку и подключить ее:
Читайте также: