Интернет-магазин «Мастердом»
В каталоге сайта используется гибкая система фильтров по различным параметрам и цветам товаров. При этом для конкретной выборки мы не только отображаем найденное, но и сразу деактивируем «пустышки» — те фильтры, установив которые пользователь получит некрасивое «ничего не найдено». Для этого осуществляется множество поисковых запросов, и в каждом исключается тот фильтр, который мы просчитываем на отсутствующие значения.
Фронт-энд оказался достаточно сложным (впрочем, сейчас мы уже и не вспомним, когда он у нас получался простым). Множество взаимосвязанных переключателей, чекбоксов и полей для ввода взаимодействуют друг с другом, используя событийную сущность JavaScript. По сути, мы получили отдельное клиентское приложение, которое получает голые данные с сервера и на их основе строит все элементы управления. В частности, именно это позволило нам достаточно оперативно и почти полностью поменять алгоритм выбора цвета и оттенка, когда проектировщики взаимодействия внесли корректировки в интерфейсы на финальной стадии реализации проекта.
При разработке серверного ПО главной задачей стала максимальная интеграция внутренней складской системы заказчика и каталога сайта. Мы старались избежать создания каких-то административных интерфейсов и обеспечить мгновенное отображение изменений по складу — начиная с остатков и цен, и заканчивая описанием и фотографиями товаров.
Для решения всех этих задач используется протокол SOAP. Сервера подняты как на сайте, так и на складе — для приема информации о заказах. Компонент фреймворка Yii легко позволяет генерировать нужный нам WSDL из контроллеров и моделей.
Хотя, конечно, совсем без «админки» не обошлось. К примеру, все артикулы плитки мы показываем в привязке к фотографиям интерьеров. Поэтому для быстрой и удобной разметки артикулов по фотографиям пришлось реализовать отдельный интерфейс. Администратор может добавить произвольный артикул в нужные точки фотографии и легко отредактировать ранее добавленные.
По воле заказчика, в качестве базы была использована MySQL. Вся структура базы, конечно, пропитана внешними ключами. В связи с тем, что запросы в базу получились довольно сложными, обязательным этапом стало профилирование всех запросов с использованием Neor Profile SQL с последующим анализом проблемных. В коде заложена возможность использования кеширования на нескольких уровнях абстракции.