[MODX, MiniShop2] Обязательный чекбокс при оформлении заказа

В частности речь идет о чекбоксе "согласие с политикой безопасности", но схема актуальна и для любого другого чекбокса или радиобаттона.

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

Путь поиска решения:

  1. Указываем обазательное поле у варианта доставки в настройках MiniShop2
  2. Прописывам класс input-parent для обертки инпута
  3. Если не помогло, тогда открываем assets/components/minishop2/js/web/default.js и ищем блок с указанием дефолтных классов, там должно быть что-то типа miniShop2.Order.inputParent =
  4. Прописываем указанный там класс для обертки инпута
  5. Радуемся, но не тут то было. Хоть тресни, но система не выводит ошибку.
  6. Идем снова в тот файлик JS, и ищем строку var formData = $form.serializeArray();
  7. Добавляем после этой строчки код:
        $form.find("input.required:checkbox").each(function(){
            if(!this.checked){
                formData[Object.keys(formData).length] = {"name":this.name,"value": ""}
            }
        });
        
  8. Радуемся, @#$^, по-настоящему.
    Пояснение: Прикол в том, что функция .serializeArray() Не видит неотмеченный чекбокс, и не посылает информацию о нем на сервер. Соответственно сервер не возвращает ответ типа "Эй, поле пустое!", наивный сервак сообще не знает что он должен проверять это поле. Предлагаемое решение создает элемент массива с пустым значением — чтобы сервак это увидел и поругался.

HTML и CSS для симпатичного чекбокса

    
C правилами обработки персональных данных ознакомлен

Комментарии (0)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Наш сайт использует куки, нажмите «ОК» если вы не против
OK