Предыдущая версия сайта работала на сильно кастомизированном «Битриксе», который, к сожалению, текущим нуждам уже сильно не соответствовал. Новую версию сайта, как и большинство последних работ, мы развернули на фреймворке Yii1.

Занялись было переносом данных из «Битрикса», но столкнулись с неожиданной проблемой — за 7 лет эксплуатации первой версии сайта карточки устройств вносились в каталог разными людьми и самыми разнообразными, порой весьма неожиданными, способами. Поэтому об идее полного переноса контента исключительно программным способом пришлось забыть. Выход был один — звать мужественных белорусских коллег, которые вручную перенесли 2/3 контента и причесали тот, который все-таки удалось перенести программно.

Параллельно фронт-енд отдел реализовывал административный интерфейс на AngularJS. Быстро, красиво, эффективно.

Попробовали использовать WISIWYG редактор «Redactor», но отказались от него — слишком много проблем, особенно в части операций копирования и вставки. Вернулись к проверенному CKEditor.

Для удобства SЕО-оптимизации урлы страниц реализовали без привязки к разделам сайта — это позволяет, к примеру, переместить устройство из одной группы в другую, не меняя при этом URL.

Поиск сделали полнотекстовый, на базе PostgreSQL.

Беда пришла откуда не ждали. Заказчик захотел поменять логотип на старых фотографиях в примерах работ и каталоге товаров. Потратили кучу времени на попытки программно распознавать старое лого на фотках. Но и тут столкнулись с результатами раздолбайства контентщиков — логотипов на фотках оказалось около 10 вариантов, разного размера и в разных местах. В результате, снова позвали наших белорусских друзей, которые вручную разметили области логотипов на фотках. Теперь логотипы можно менять сколько угодно — заменить один на другой не проблема. Правда, из-за этого пришлось отключить генерацию картинок «на лету» с использованием nginx и перейти на предварительную генерацию.

Попутно на сайте сделали два конфигуратора. Один из них подбирает устройства, исходя из различных полезных функций, вроде автозапуска и геопозиционирования. Второй — подбирает оптимальную защиту, исходя из рисковости автомобиля. По сути, получилась обычная структура связей «многие-ко-многим», но немного усложненная — часть устройств обеспечивает нужные функции лишь в комплекте с другими устройствами. Зафиксировали это как дополнительные поля в таблице связей.

После запуска сайта пришлось делать массу посадочных страниц с кучей JS и анимации, реализовывать противоречащие друг другу рекомендации CEO-шников и рекламщиков, прикручивать кучу внешних скриптов для учета и аналитики... Но это уже мелочи. В конечном счете, мы знаем, что добро всегда побеждает зло.