SHSA37
@SHSA37
Developer

Почему при автозаполнении полей в браузере поля формы приходят пустые?

Сайт MODX 2.8.4, MS2
Столкнулся с такой проблемой если при оформлении заказа поля доставки (улица, дом) подставлять при помощи автозаполнении браузера, то в плагин передаются пустые значения?
(проверяю через консоль)

if ($modx->event->name = 'msOnCreateOrder') { //msOnCreateOrder //msOnSubmitOrder

  $miniShop2 = $modx->getService('miniShop2');
  $miniShop2->initialize($modx->context->key);
  
  $cart = $miniShop2->cart->get(); // товары корзины
  $order = $miniShop2->order->get(); // заказ
  $status = $miniShop2->cart->status(); // статус корзины

  //артикулы товаров
  $product = [];
  foreach ($cart as $idx) { $i++;
      $prod = $modx->getObject('msProduct', $idx[id]);
      $product = $prod->get('article');
      $modx->log(1, 'message-товар: '.$product);
  }
  //количество товаров
  $product_kol = [];
  foreach ($cart as $idx) { $k++;
      $product_kol = $idx[count];
      $modx->log(1, 'message-количество: '.$product_kol);
  }
  
  $msReceiver = $order['receiver'];
  $msPhone = $order['phone'];
  $msEmail = $order['email'];
  $msComment = $order['comment'];
  $msStreet = $order['street'];
  $msBuilding = $order['building'];
  $msEntrance = $order['entrance'];
  $msFloor = $order['floor'];
  $msRoom = $order['room'];
  $modx->log(1, 'message-имя: '.$msReceiver);
  $modx->log(1, 'message-тел: '.$msPhone);
$modx->log(1, 'message-мэил: '.$msEmail);
  $modx->log(1, 'message-комент: '.$msComment);
  $modx->log(1, 'message-улица: '.$msStreet);
  $modx->log(1, 'message-дом: '.$msBuilding);
  $modx->log(1, 'message-подезд: '.$msEntrance);
  $modx->log(1, 'message-этаж: '.$msFloor);
  $modx->log(1, 'message-квартира: '.$msRoom);
} else return;
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 2
DanArst
@DanArst
Гриффиндор в моде при любой погоде!
В minishop2 работает так - при заполнении поля срабатывает js-собыие change и отправляется post-запрос name:value, на бэке срабатывает событие msOnAddToOrder и значение поля с ключом добавляются в заказ, но при autocomplete js-change не срабатывает.
Как вариант можно будет скопировать дефолтный js-скрипт minishop2 по адресу assets/components/minishop2/js/web/default.js и назвать условно custom.js. Далее в системных настройках minishop2 по ключу ms2_frontend_js указать новый скрипт. В скрипте в методе submit miniShop2.Order пробежаться по всем полям и запустить miniShop2.Order.add(key, value);, где key - name поля, а value соответственно значение.
Ответ написан
SHSA37
@SHSA37 Автор вопроса
Developer
По итогу вроде сработало как посоветовал Danny Arty, но использовал проверку на focus, вот код из доработанного assets/components/minishop2/js/web/default.js

initialize: function () {
            miniShop2.Order.setup();
            if ($(miniShop2.Order.order).length) {
                miniShop2.$doc
                    .on('click', miniShop2.Order.order + ' [name="' + miniShop2.actionName + '"][value="order/clean"]', function (e) {
                        miniShop2.Order.clean();
                        e.preventDefault();
                    })
                    .on('change', miniShop2.Order.order + ' input,' + miniShop2.Order.order + ' textarea', function () {
                        var $this = $(this);
                        var key = $this.attr('name');
                        var value = $this.val();
                        miniShop2.Order.add(key, value);
                    })
                    .on('focus', miniShop2.Order.order + ' input,' + miniShop2.Order.order + ' textarea', function () {
                        var $this = $(this);
                        var key = $this.attr('name');
                        var value = $this.val();
                        miniShop2.Order.add(key, value);
                    });
                var $deliveryInputChecked = $(miniShop2.Order.deliveryInput + ':checked', miniShop2.Order.order);
                $deliveryInputChecked.trigger('change');
            }
        },
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы