Enver Dzheparov

Исправление обязательных опций

Валидация обязательных опций товара

$30 · разработка · IP5 Agency

По мотивам вопроса на форуме CS-Cart: Required Options Not Working Again — Nova Theme — CS-Cart v4.20.1

Рис. 1 — Обязательная опция "Memory capacity" (Select box) в восстановленном пустом состоянии "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 ядра. Проблема в том, что этот же блок отвечает за подстановку разумного значения по умолчанию для всех остальных опций, а не только обязательных — поэтому его отключение ломает вещи, которые от него зависят: смену картинки при выборе, предпросмотр цены при загрузке страницы и работу быстрого добавления в корзину на страницах категорий.

Наш модуль воздействует только на опции, которые действительно обязательны, оставляя все необязательные опции без изменений. Мы также добавили жёсткую серверную проверку, которой для этих типов опций не было вообще никогда — ядро всегда проверяло "обязательность" только для опций типа "Файл" на этапе добавления в корзину.

Содержание

  1. Установка и первоначальная настройка
  2. Справочник по настройкам
  3. Проверка исправления на витрине
  4. Область применения и совместимость
  5. Известные ограничения

1. Установка и первоначальная настройка

Перейдите в Модули → Управление модулями → Установить модуль, загрузите архив модуля и активируйте его. У модуля нет отдельного экрана управления — сразу после активации исправление применяется ко всем товарам с обязательной опцией Select box или Radio group в режиме "Одновременно". Все настройки находятся на собственной вкладке Настройки модуля.

Рис. 2 — Модуль отображается как активный в разделе Модули → Управление модулями сразу после установки.

2. Справочник по настройкам

В таблице ниже перечислены все настройки на вкладке модуля.

Настройка Что делает
Применять жёсткую проверку к Выбор области действия: только Select box и Radio group (по умолчанию, соответствует точной формулировке бага на форуме CS-Cart) или дополнительно включить обязательные опции типа Checkbox.
Логировать заблокированные попытки добавления в корзину При включении каждый случай блокировки добавления в корзину из-за пропущенной обязательной опции записывается в журнал событий CS-Cart — удобно, чтобы заметить сломанную кастомизацию темы или бота, атакующего эндпоинт корзины.

Рис. 3 — Вкладка настроек модуля с обеими опциями.

Рис. 4 — Вкладка "Настройки: Журнал событий" с настройкой логирования модуля.

3. Проверка исправления на витрине

После активации модуля откройте любой товар с обязательной опцией Select box или Radio group в режиме "Одновременно" и убедитесь, что:

Рис. 5 — Сравнение: страница товара до установки модуля (опция тихо предвыбрана) и после (пустой плейсхолдер, показано сообщение об обязательности).

Чтобы убедиться, что серверная блокировка также работает для иконки быстрого добавления в корзину на странице категории, попробуйте добавить товар с обязательной опцией прямо со страницы категории или списка, не открывая полную страницу товара — товар должен быть отклонён точно так же.

Рис. 6 — Уведомление об ошибке при использовании иконки быстрого добавления в корзину для товара с невыполненной обязательной опцией.

4. Область применения и совместимость

Модуль меняет поведение только для опций, у которых параметр Обязательная установлен в Да, и только для товаров, у которых Тип опций установлен в Одновременно. Опции в режиме Последовательно не затрагиваются, поскольку в этом режиме опции и так раскрываются постепенно по мере выбора покупателя, и этот сценарий не входил в исходное описание бага.

Проверено на CS-Cart от 4.16.0 до 4.20.1. Модуль использует только стандартные, документированные хуки CS-Cart и не изменяет ни одного файла ядра, поэтому ожидается, что он переживёт обновления ядра в этом диапазоне версий без переустановки. При обновлении выше 4.20.1 мы рекомендуем повторно проверить работу модуля и сообщить нам результат в любом случае — мы с готовностью расширим диапазон совместимости.

5. Известные ограничения

Модуль решает именно ту регрессию, что описана на форуме CS-Cart: обязательные опции Select box и Radio group в режиме "Одновременно". Обязательные опции типа Checkbox можно опционально включить на вкладке настроек, но поскольку группа чекбоксов может допускать несколько выборов, "обязательность" трактуется как "выбран хотя бы один вариант". Обязательные опции типа Файл не затрагиваем, поскольку CS-Cart уже корректно проверяет их самостоятельно.