Проверка полей при оформлении заказа

Углубленное изучение Битрикс
  • Проверка полей при оформлении заказа

    Антон Долганин 2 Июля 2014 7:25 2449
    Забыли ввести поле, некорректный e-mail — все это проверяется уже после отправки. А хотите на лету? Тогда мой новый модуль вам в помощь!

    Более того, модуль дает вам возможность писать свои валидаторы на совершенно любое поле. Например, номер телефона — этого нет в Битрикс штатно ни в какой форме. А у меня есть ;)

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











    Понравилось? Давайте покупать и ставить

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

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

    Итак, вы поставили, какие есть варианты, кроме того, что все идеально заработало? Вариант первый, иконки чуть-чуть перекосились, сдвинулись правее/левее/выше/ниже. Это правится легко. Воспользуемся браузером, который позволяет налету править стили элемента. Например, Хром.



    И там правим стили, видя как иконка сразу встает на нужное место:



    Когда нас все устроило, копируем новые значения стилей, идем в настройки модуля (скрин выше был), и вставляем в поле «Общий CSS иконок». Таким же образом вы можете поправить и другие стили иконки. Например, саму картинку.

    Но что если телодвижения такие не помогают, и нет-нет, да перекашивает. Тогда, к сожалению, надо внедрять вручную:(Кастомизируете шаблон оформления заказа (этот момент я упущу), и в файле шаблона props.php в самом верху пишите такую функцию.

    function __showIcon($pid) {
        static $included = null;
        if ($included === null) {
            $included = CModule::IncludeModule('asd.ordercheckfields');
        }
        if ($included) {
            return CASDOrderCF::setIcon($pid);
        } else {
            return '';
        }
    }


    А в нужном месте уже вставляете вызов функции, передавая ей ID (именно ID!) свойства.

    echo __showIcon($arProperties['ID']);


    Я не смогу всем конечно помочь, но если у вас есть коротенечкий вопрос, и не получается совсем чуть-чуть — напишите мне, что-нибудь придумаем.

    Перейдем к написанию собственного валидатора

    На первых скринах вы видели, как модуль ловко проверяет номер телефона. Как его научить? А легко и просто  —  достаточно написать свой обработчик события вот такого формата:

    AddEventHandler('asd.ordercheckfields', 'OnOrderPropCheck', 'ASD_OnOrderPropCheck');
    function ASD_OnOrderPropCheck($arProp, $val) {
        if ($arProp['CODE'] == 'PHONE') {
            //http://habrahabr.ru/post/110731/
            if (strlen($val) && !preg_match('#^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$#is', $val)) {
                return 'Телефон некорректен.';
            }
        }
    }


    Остальные обработчики напишите по аналогии :)