Ошибка возникает в административной части при редактировании заказа. SS 9.x точно, 8.x возможно.
- Есть два способа доставки. Первый использует только штатные поля адреса, второй выводит дополнительный контрол (input) штатными средствами, без значения по умолчанию, но с признаком `required`.
- В форме редактирования заказа, когда выбран первый способ доставки, дополнительный контрол от второго способа не удаляется, а скрывается (он обёрнут в div с display:none).
- При сабмите формы (сохранении заказа) браузер пыается валидировать форму и получает ошибку, т.к. скрытый контрол пуст и у него атрибут 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 комментария
а что насчет customFieldsForService?
А смысл? Там всего один вариант. Т.е. этот контрол всегда должен показываться. `customFieldsForService` имел бы смысл, если бы плагин выдавал несколько вариантов и контрол надо показывать для одного варианта, и не показывать для другого.
На самом деле просто забыли про то, что можно штатным способом у контрола указать атрибут required, чтобы валидацию выполнял браузер. Все штатные плагины валидацию выполняют только внутри себя.
Атрибут-то я уберу, но осадочек останется. При переделке редактирования заказа под UI2 надо бы как-то учитывать такую ситуацию.