Что нужно онлайн-магазину сладостей в канун Нового года
О клиенте
Клиент — продавец новогодних кондитерских наборов Москондитер. В их ассортименте наборы для членов семьи любого возраста, хранящиеся в ярких картонных и металлических упаковках и милых текстильных игрушках в форме животных и мифических существ.
Задачи
Незадолго до Нового года из компании, ранее занятой разработкой сайта, ушли все Drupal-разработчики. Вместо неё на проект попали мы, и включаться надо было быстро — у сайта было несколько проблем, и важно было решить их к началу новогоднего сезона:
- блоки со ссылками должны работать нормально с точки зрения SEO (без оборачивания в специальный html-тег <a>, с переходом через JavaScript-код),
- отображаются все фото,
- фильтр работает правильно,
- ценник показывает все товары из выбранного диапазона цен,
- правильно работает фильтр ассортимента, привязанный к кнопке «Подобрать подарки».
Решение
Импорт листингов
Когда администраторам сайта нужно обновить ассортимент, они не вбивают товары вручную, а импортируют .xls-файлы из каталога. В этом файле подарок состоит из сущностей «составы», «наборы» и «подарки» — каждая из них импортируется из файла на сайт по отдельности.
За это отвечал кастомный модуль, но он работал с ошибками. Файл автоматически загружался на сервер и постоянно обновлялся, но бэкенд сайта, написанный на Drupal, не мог его обработать, так как искал в другой директории сервера. Также у модуля не работал парсер, который читает в файле колонки с информацией о подарках и преобразовывает их содержимое в переменные, вписываемые в каталог: он обращался к неправильной колонке.
В итоге мы решили, что в условиях ограниченного времени будет быстрее починить кастомный модуль, чем искать контрибный.
Фильтры в каталоге кондитерских изделий
На сайте есть фильтрация подарков по диапазону цен, типу упаковки, весу и типу состава. Она работает через Ajax-модули.
Условия, заданные в фильтре, не применялись одновременно: ты можешь выбрать подарок премиум-состава весом 200 грамм, а фильтр покажет тебе премиум всех весов. Починили это, поправив SQL-запросы и переписав часть js-кода, отвечающего за применение фильтрации.
Мы также добавили новые фильтры по типу состава и настраивали смену символа года, а ценник сразу показывает, сколько товаров попадает под выбранный диапазон цен.
Проблема с выводом картинок
Изучая вопрос, почему не загружается некоторые иллюстрации, мы решили, что неправильно работает PHP-расширение JD. Оно используется для генерации миниатюр из большого изображения. И в момент этой генерации библиотека выдавала ошибку.
Для эксперимента мы подключали библиотеку ImageMagick для тех же целей, и она делала то, что ожидалось: создавала загружаемые миниатюры. В итоге мы заменили JD на ImageMagick, которая поддерживает большее количество форматов изображений и более популярна сама по себе.
Дополнительным фактором могла быть работа CDN, но результаты совместной работы с техподдержкой поставщика этой услуги отклонили это предположение.
Что дальше?
До Нового года клиент делился планами по редизайну сайта и внедрению новой функциональности, и мы договорились вернуться к этому после праздников. В числе проблем мы видим работу Ajax-модулей, отвечающих за фильтрацию и функцию «Собери подарок». Ajax-модули — удобное решение, но оно неправильно работает. Их нужно переписать так, чтобы они согласовывались с работой штатного механизма Ajax в Drupal.
Также следует переписать JavaScript по Drupal-стандартам. На момент выпуска кейса js-код на сайте не учитывал JavaScript API, который используется в Drupal. Проблемы возникают в таких компонентах, как фильтр, где, используя, JavaScript API Drupal можно написать более гибкий и более стабильный код.