Реальная проверка обязательных опций: исправляем баг CS-Cart 4.16.1-4.20.1

Перейти к решению

По мотивам вопроса на форуме 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 можно включить отдельно в настройках — там "обязательность" значит "выбран хотя бы один вариант". Обязательный тип "Файл" не трогаю — там валидация в ядре и так работает нормально. Режим "Последовательно" тоже вне сюда — там опции и так раскрываются по шагам, баг к нему не относился.

Перейти к решению

1 лайк

Читать невозможно, ai slop