Техническое задание: Исправление работы корзины на Yii Framework
Суть проблемы
В интернет-магазине, построенном на Yii Framework, критически неисправна функциональность корзины покупок. У большинства посетителей сайта не работают базовые операции:
- Изменение количества товаров (увеличение/уменьшение через кнопки)
- Удаление позиций из корзины
- Ручной ввод количества в поле
- Автоматический пересчет суммы позиции и итоговой суммы заказа
При этом добавление товара в корзину со страницы товара работает корректно. По неподтвержденным данным, у небольшой части пользователей функционал продолжает работать, что вызывает подозрения на проблемы с кэшированием или ассетами.
Задачи для исполнителя
1. Диагностика
- Проанализировать работу клиентского JavaScript-скрипта (
/assets/…/js/shop-basket.js), который отвечает за обработку событий в корзине.
- Изучить backend-обработчик маршрута
/{section}/basket-update на стороне Yii.
- Определить, почему события не срабатывают или запросы возвращают некорректные данные.
- Учесть факторы кэширования, сборки ассетов и возможные конфликты версий скриптов.
2. Исправление
- Устранить выявленные ошибки в логике работы скрипта и backend-обработчика.
- Обеспечить стабильную работу функций изменения количества (кнопки +/-), ручного ввода и удаления товаров для всех пользователей.
- Гарантировать корректный пересчет и отображение всех сумм (позиции, итог) после любого действия в корзине.
- Добиться кросс-браузерной совместимости решения.
3. Отчетность
- Предоставить описание выявленной причины неисправности.
- Приложить список всех внесенных правок в код (как frontend, так и backend).
Исходные данные
Основная логика корзины реализована в JS-файле shop-basket.js. На событие window.onload в нем навешиваются обработчики на элементы с классами .product__quantity_minus, .product__quantity_plus, .product__quantity_input (событие change) и .product__delete. Эти обработчики выполняют AJAX-запрос ($.get) по адресу /{section}/basket-update с параметром action (increment, decrement, update, delete) и обновляют интерфейс на основе ответа.