Ошибка сабмита формы редактирования заказа, если у одного из способов доставки есть кастомное поле обязательное для заполнения Принято

2

Ошибка возникает в административной части при редактировании заказа. SS 9.x точно, 8.x возможно.

  1. Есть два способа доставки. Первый использует только штатные поля адреса, второй выводит дополнительный контрол (input) штатными средствами, без значения по умолчанию, но с признаком `required`.
  2. В форме редактирования заказа, когда выбран первый способ доставки, дополнительный контрол от второго способа не удаляется, а скрывается (он обёрнут в div с display:none).
  3. При сабмите формы (сохранении заказа) браузер пыается валидировать форму и получает ошибку, т.к. скрытый контрол пуст и у него атрибут required

Кастомный контрол в плагине доставки создаётся полностью штатными средствами фреймворка

    public function customFields(waOrder $order): array
    {
        $fields = parent::customFields($order);
        $shipping_params = (array)$order->shipping_params;

        $fields['custom_field'] = [
            'control_type' => waHtmlControl::INPUT,
            'value'        => $shipping_params['custom_field'] ?? '',
            'title'        => 'Тайтл',
            'description'  => 'Описание',
            'field_type'   => 'number',
            'min'          => 1,
            'max'          => 20,
            'step'         => 1,
            'required'     => 1,
            'data'         => ['affects-rate' => true]
        ];

        return $fields;
    }

3 комментария

  • +1
    Anton F Anton F 12 апреля 2022 21:47 #

    а что насчет customFieldsForService?

    • +1
      Syrnik.com Syrnik.com 12 апреля 2022 23:06 #

      А смысл? Там всего один вариант. Т.е. этот контрол всегда должен показываться. `customFieldsForService` имел бы смысл, если бы плагин выдавал несколько вариантов и контрол надо показывать для одного варианта, и не показывать для другого.

    • +1
      Syrnik.com Syrnik.com 12 апреля 2022 23:10 #

      На самом деле просто забыли про то, что можно штатным способом у контрола указать атрибут required, чтобы валидацию выполнял браузер. Все штатные плагины валидацию выполняют только внутри себя.

      Атрибут-то я уберу, но осадочек останется. При переделке редактирования заказа под UI2 надо бы как-то учитывать такую ситуацию.

      Добавить комментарий

      Чтобы добавить комментарий, зарегистрируйтесь или войдите