По мотивам вопроса на форуме CS-Cart: Required Options Not Working Again — Nova Theme — CS-Cart v4.20.1
Рис. 1 — опция "Memory capacity" в пустом состоянии "Please, select one" и опция "Choose a free game" с ошибкой после попытки добавить в корзину.
Начиная с 4.16.2 в CS-Cart сломана валидация обязательных Select/Radio опций в режиме "Одновременно": первый вариант тихо предвыбирается, звёздочка "обязательно" висит, но по факту ничего не проверяется — заказ проходит с дефолтным значением и его надбавкой к цене, без единого клика покупателя.
Написали модуль, который это чинит — без правки файлов ядра, только через хуки.
Что делает модуль
Две вещи:
- Возвращает пустой плейсхолдер "Пожалуйста, выберите один" вместо предвыбранного значения, и стандартную ошибку "поле обязательно для заполнения" при попытке добавить товар без выбора.
- Добавляет проверку на сервере — на всякий случай, если запрос дойдёт до корзины в обход формы (актуально для быстрого добавления в корзину со страниц категорий, где формы опций вообще нет).
На необязательные опции это никак не влияет — дефолты, предпросмотр цены, смена картинки работают как раньше.
Почему модуль, а не патч ядра
В теме на форуме CS-Cart саппорт подтвердил баг (от 4.16.2 до 4.20.1 точно) и предложил обходной путь — закомментировать кусок кода в fn.options.php. Только этот кусок отвечает не только за обязательные опции, а вообще за все дефолты — так что заодно ломается смена картинки, предпросмотр цены и быстрое добавление в корзину. Модуль трогает только то, что реально помечено обязательным, и добавляет серверную проверку, которой для Select/Radio не было вообще никогда (раньше на сервере проверялся только тип "Файл").
Установка
Дополнения → Управление дополнениями → Установить дополнение, загрузить архив, активировать. Отдельного экрана управления нет — после активации фикс сразу работает для всех обязательных Select/Radio в режиме "Одновременно". Настройки — на вкладке "Настройки" дополнения.
Рис. 2 — дополнение активно в списке.
Настройки
| Настройка | Что делает |
|---|---|
| Применять жёсткую проверку к | Только Select/Radio (дефолт, как в баге на форуме) или + Checkbox. |
| Логировать заблокированные добавления в корзину | Пишет в журнал событий каждый случай блокировки — полезно, если сломается кастомная тема или кто-то долбит корзину напрямую. |
Рис. 3 — вкладка настроек.
Как проверить
Открываете товар с обязательной Select/Radio опцией в режиме "Одновременно": вариант не предвыбран, "Добавить в корзину" без выбора выдаёт ошибку и не добавляет товар. Необязательные опции того же товара — без изменений.
Рис. 4 — до/после.
Отдельно стоит проверить быстрое добавление в корзину со страницы категории — там формы опций нет вообще, товар должен так же отклоняться.
Рис. 5 — ошибка при быстром добавлении в корзину.
Совместимость и ограничения
Проверено на 4.16.1–4.20.1. Только стандартные хуки, ядро не тронуто — должен пережить обновления в этом диапазоне без переустановки. Если обновитесь выше 4.20.1 — напишите, как отработал, расширим диапазон.
Обязательный Checkbox можно включить отдельно в настройках — там "обязательность" значит "выбран хотя бы один вариант". Обязательный тип "Файл" не трогаю — там валидация в ядре и так работает нормально. Режим "Последовательно" тоже вне сюда — там опции и так раскрываются по шагам, баг к нему не относился.





