ПН-ПТ: с 09:00 до 20:00

Комплексное обновление и разработка интернет-магазина доставки цветов

В конце января 2025 года был завершен инженерный проект по обновлению и полному рефакторингу платформы интернет-магазина по доставке цветов и подарков. Ресурс был переведен с устаревшей кодовой базы Joomla 3.x на актуальную архитектуру Joomla 5.2.0 с оптимизацией под серверное окружение PHP 8.1. Проект включал в себя не только трансфер базы данных (ETL), но и написание с нуля фронтенд-интерфейса, глубокую модернизацию E-commerce ядра JoomShopping, внедрение сложных алгоритмических JavaScript-решений без использования тяжелых фреймворков и строгую SEO-калибровку (устранение дублей, настройка канонических ссылок).

Главная страница обновленного интернет-магазина доставки цветов

1. Архитектура миграции и серверная инфраструктура

Переход с третьей версии Joomla на пятую требует кардинальной перестройки принципов работы с базой данных и API системы. В процессе миграции были решены следующие фундаментальные задачи:

  • Адаптация под PHP 8.1: Кодовая база шаблона и всех задействованных расширений прошла строгий аудит. Были устранены устаревшие (deprecated) функции, исправлены предупреждения строгой типизации, а вызовы классов переведены на использование пространств имен (Namespaces) в соответствии со стандартами PSR-12.
  • Обновление базы данных JoomShopping: Выполнен перенос структуры таблиц товаров (#__jshopping_products), категорий, заказов и клиентов. Индексы баз данных были перестроены для повышения скорости выполнения SQL-запросов.
  • Маршрутизация (URL Routing): Ключевым бизнес-требованием являлось сохранение 100% старых URL-адресов для удержания поисковых позиций. Была сохранена структура ID категорий и товаров. Механизм SEF-ссылок настроен таким образом, чтобы адреса вида /katalog/klassicheskie-bukety/buket-iz-15-roz продолжали работать без необходимости настройки массива 301-редиректов.

2. Модернизация E-commerce ядра (JoomShopping)

Магазин доставки цветов имеет специфическую бизнес-логику: необходимость привязки сопутствующих товаров, динамическая подгрузка ассортимента и сложная система маркировки. Для этого базовая комплектация JoomShopping была расширена специализированными аддонами и кастомным кодом.

2.1. Интеграция премиум-аддонов JoomShopping

Для реализации требуемого маркетингового функционала были интегрированы и доработаны на уровне кода следующие расширения от Webdesigner-profi:

  • Product Multilabel: Внедрен алгоритм присвоения нескольких меток (шильдиков) одному товару. Теперь к букетам могут одновременно применяться метки «Скидка», «Хит продаж» или «Новинка». Потребовалась правка файлов шаблона вывода товара (list_products/product.php) для корректного позиционирования абсолютных блоков .product_label_pos_left поверх изображений.
  • Set of Product: Настроен функционал автоматического предложения бесплатной открытки к каждому букету. Это потребовало ручной привязки ID подарочной открытки к массиву товарных позиций и доработки логики добавления в корзину (исключение учета стоимости подарочного сета).
  • AJAX Product Pagination: Для снижения нагрузки на сервер (TTFB) и базу данных при рендеринге объемных категорий (например, «Букеты из роз»), классическая пагинация заменена на асинхронную подгрузку. Внедрена кнопка «Загрузить ещё» (#load-more-btn). Скрипт анализирует ширину экрана (window.innerWidth) и динамически определяет шаг подгрузки (по 12 товаров для десктопа и мобильных устройств), инкрементируя значение атрибута data-loaded.

2.2. Модификация процесса оформления заказа (Checkout)

Согласно требованиям законодательства РФ (ФЗ-152), в процесс чекаута интегрированы юридические механизмы согласия. Выполнено системное переопределение (Override) файла /components/com_jshopping/templates/base/checkout/adress.php. На 826-й строке внедрен блок с чекбоксом, подтверждающим ознакомление с «Заявлением о конфиденциальности». Текстовки переменных вынесены в языковые файлы и управляются через административную панель (Joomshopping > Настройки > Статический текст).

3. Глубокая SEO-калибровка и управление каноническими ссылками

Специфика каталога JoomShopping заключается в генерации дублей страниц при доступе к одному товару через разные категории или фильтры. Для жесткого контроля индексации проведена фундаментальная настройка:

  • Нативная канонизация: Активированы базовые функции JoomShopping Product canonical и JoomShopping category canonical.
  • Custom Canonical CK: Установлен и настроен системный плагин для принудительного переопределения канонических ссылок.
  • Очистка SEF: Во избежание циклических редиректов удален базовый домен из системных настроек SEF Joomla.
  • Мануальная разметка: Для статических материалов Joomla, не относящихся к магазину (например, /kontakty), канонические ссылки прописаны вручную во вкладке "Метаданные". Автоматическая генерация канонических ссылок на уровне пунктов меню (Menu Items) отключена для предотвращения конфликтов с роутером JoomShopping.
  • Исключения, такие как главная страница /katalog (не являющаяся физической категорией JoomShopping) и /sitemap, оставлены без жестких канонических тегов для сохранения ранее сформированного графа индексации в Яндекс.Вебмастере.

4. Фронтенд-разработка: Helix Ultimate и Typography

Визуальный интерфейс спроектирован на базе фреймворка Helix Ultimate и сетки Bootstrap 5.3.3. Разработана сложная типографическая иерархия с использованием библиотеки Google Fonts:

  • Базовый текст (Body): 'Roboto Serif', sans-serif (16px для десктопов, плавно уменьшающийся до 13px на мобильных через CSS Media Queries).
  • Заголовки H1-H2: 'PT Serif', sans-serif для придания премиального, классического вида.
  • Навигация (Mega Menu): 'Oswald', sans-serif (16px, font-weight: 300).
  • Акцентные элементы H6: 'Exo 2', sans-serif.

Цветовая палитра строится на использовании CSS-переменных, где акцентным выступает фирменный малиновый оттенок (#ff4057), контрастирующий с темным (#323232) подвалом и белоснежными контентными блоками.

5. Интеллектуальные JavaScript-компоненты (Vanilla JS)

Для обеспечения максимальной производительности интерфейса (без загрузки тяжелых библиотек вроде jQuery UI или Slick Carousel) все интерактивные блоки написаны на чистом JavaScript (ES6+).

5.1. Динамический генератор тегов (DOM Parser)

Один из самых сложных алгоритмов внедрен в секцию #sevHomeTagsDesktop («Популярные направления»). Скрипт динамически парсит структуру Mega Menu в шапке сайта, извлекает ссылки и формирует из них сетку SEO-тегов на главной странице.

  1. Функция getHeaderRoots() собирает все ссылки из .sp-megamenu-wrapper.
  2. Функция findCatalogContainer() анализирует вес ссылок и находит основной контейнер каталога.
  3. Алгоритм очищает ссылки от мусорных узлов (SVG-иконки, каретки), нормализует текст (normalizeText), удаляет дубликаты по URL и исключает системные разделы (например, "По цене").
  4. На основе полученных данных скрипт "на лету" (через document.createElement) строит DOM-узлы с заголовками групп и тегами.
  5. Внедрен MutationObserver, который следит за изменениями DOM. Если меню загружается асинхронно или изменяется, скрипт автоматически перестраивает сетку тегов. Для длинных списков внедрена логика кнопки «Показать ещё» (показывает по 5 дополнительных тегов).

5.2. Комплексные слайдеры (Hero Section)

Главный баннер реализован в двух изолированных версиях: #sevDesktopSlider и #sevMobileSlider. Логика управления написана на Vanilla JS и изолирована внутри IIFE (Immediately Invoked Function Expression) для предотвращения конфликта областей видимости.

  • Мультимедиа: Поддержка видео-фона (<video autoplay muted loop playsinline>) и статических изображений.
  • Автовоспроизведение и Прогресс-бар: Настроена задержка в 9000мс. Анимация прогресс-бара синхронизирована с таймером через CSS Keyframes (@keyframes svdProgress).
  • События и Сенсорное управление: Обработка событий touchstart и touchend. Скрипт вычисляет дельту свайпа (touchEndX - touchStartX) и перелистывает слайд при преодолении порога в 50px.
  • Доступность (A11y): Управление с клавиатуры (ArrowLeft / ArrowRight), корректные ARIA-атрибуты, приостановка автовоспроизведения при сворачивании вкладки браузера (visibilitychange).

5.3. Интерактивная карусель "Недавно смотрели / Новинки"

Блок горизонтальной прокрутки товаров реализован с поддержкой нативного Drag-and-Drop (захват и перетаскивание мышью).


slider.addEventListener('mousemove', (e) => {
    if (!isDragging) return;
    e.preventDefault();
    const x = e.pageX - slider.offsetLeft;
    const walk = (x - startX) * 1.5; // Мультипликатор скорости 1.5
    slider.scrollLeft = scrollLeft - walk;
});

Помимо мыши, реализованы кнопки дискретного скроллинга, вычисляющие ширину контейнера (slider.offsetWidth) для точного позиционирования следующего блока карточек.

6. Мобильная адаптация и App-like интерфейс

Пользовательский опыт на мобильных устройствах максимально приближен к нативным приложениям.

6.1. Фиксированная полоса доставки (Sticky Delivery Bar)

Реализован информационный блок #sevHeaderDelivery, информирующий о круглосуточной доставке. На мобильных устройствах он фиксируется (position: fixed) ровно под шапкой (top: 50px). Для предотвращения перекрытия контента внедрен элемент .sev-header-delivery-space. Написан сложный JavaScript-обработчик с использованием MutationObserver, который отслеживает открытие бокового меню (Off-Canvas) и плавно скрывает полоску (transform: translateY(-10px)), чтобы она не ломала z-index навигации.

6.2. AJAX Мини-корзина (SJ Minicart Pro)

Внедрен модуль mod_sj_minicart_pro. Логика корзины полностью асинхронна.

  • Кнопки плюс/минус и изменение количества (input keyup) отправляют AJAX-запрос к контроллеру VirtueMart/JoomShopping с задержкой 500мс (техника Debounce) для предотвращения DDOS-эффекта на сервер.
  • Интегрировано поле для ввода купона с мгновенной проверкой (задача setcoupon) и возвратом JSON-ответа об успешном применении или ошибке.
  • Визуальная часть корзины использует плагин mCustomScrollbar для эстетичной прокрутки.

7. Интеграции, Безопасность и Юридическая обвязка

Внедрен системный плагин для соответствия требованиям GDPR и Роскомнадзора. Дизайн попапа кастомизирован через CSS-переменные (--cc-bg, --cc-btn-primary-bg: rgba(219, 83, 83, 1)). Текстовые константы плагина переведены и переопределены напрямую в INI-файлах языковых пакетов:

/administrator/language/ru-RU/ru-RU.plg_system_n3tcookieconsent.ini (строка 371)

7.2. Беспарольная аутентификация (WebAuthn)

Форма входа в систему (mod_login) оснащена кнопкой plg_system_webauthn_login_button, интегрирующей API FIDO2. Пользователи могут входить в личный кабинет с использованием биометрических датчиков устройства, что исключает возможность брутфорса и перехвата паролей.

7.3. Интерактивные формы (QuickForm3 и Умный поиск)

На сайте развернута многоуровневая система коммуникации:

  • Smart Search: Модальное окно поиска открывается по клику, не перегружая DOM-дерево при первоначальной загрузке.
  • Smart Forms: Интегрированы модули "Обратный звонок", требующие чекбокса согласия с политикой конфиденциальности.
  • Аналитика: Подключены коды Яндекс.Метрики (yaCounter46855263), Top.Mail.Ru, скрипт защиты от скликивания (botfaqtor.ru) и виджет онлайн-консультанта Битрикс24 (loader_2_3n2zyj.js).

Использованные технологии

Технология / Инструмент Версия Роль в архитектуре проекта
Joomla! CMS 5.2.0 Ядро платформы, управление контентом, ACL, WebAuthn.
PHP 8.1 Серверное окружение, строгая типизация.
JoomShopping 5.x E-commerce база, товары, категории, чекаут.
JoomShopping Addons Latest Multilabel (метки), Set of Product (подарки), Ajax Pagination.
Helix Ultimate 2.0+ Фронтенд-фреймворк, Bootstrap 5.3.3, Layout Builder.
Vanilla JS ES6 Обработчики событий, Drag-and-Drop, MutationObserver, DOM Parser.
n3tcookieconsent Latest Управление файлами Cookie и согласиями пользователей.

Заключение

Обновление интернет-магазина цветов с Joomla 3 на Joomla 5.2 является примером технологического скачка. Архитектура сайта была переработана с нуля, избавившись от наследия старых версий. Внедрение асинхронных загрузок (AJAX), отложенной загрузки изображений, кастомных JS-скриптов и передового функционала JoomShopping позволило создать высококонверсионный, быстрый и безопасный B2C-портал. Строгое сохранение старых URL и тонкая настройка канонических ссылок обеспечили сохранность органического трафика. Если вашему E-commerce проекту требуется обновление до Joomla 5 или индивидуальная доработка JoomShopping, ознакомьтесь с ответами на частые технические вопросы.

Развернуть полный вид интернет-магазина доставки цветов на Джумле 5

Полный вид интернет-магазина доставки цветов на Джумле 5

Примечание: текущее состояние и внешний вид действующего сайта могут отличаться от представленных в данном кейсе, так как после завершения и сдачи проекта заказчик мог внести самостоятельные изменения.

Вопросы и ответы по данному сайту

Как именно реализована генерация SEO-тегов из меню?

Скрипт использует document.querySelectorAll для сбора всех ссылок внутри .sp-megamenu-wrapper. Затем он анализирует pathname и search каждой ссылки с помощью объекта URL(). Дубликаты, якорные ссылки (#) и ссылки javascript: отфильтровываются. Далее алгоритм вычисляет уровень вложенности ссылки в DOM-дереве (через parentElement) и группирует их под родительскими заголовками. Итоговый HTML формируется через document.createElement и вставляется в секцию #sevHomeTagsDesktop.

Как работает функция "Бесплатная открытка" (Set of Product) на уровне базы данных?

Аддон Set of Product создает связующую таблицу в базе данных JoomShopping, сопоставляя product_id основного товара (букета) с product_id дочернего товара (открытки). При добавлении букета в корзину (через контроллер Cart), плагин перехватывает событие и автоматически добавляет дочерний товар с нулевой стоимостью, предотвращая возможность его самостоятельного удаления покупателем без удаления основного товара.

В чем преимущество использования MutationObserver для мобильного меню?

Мобильное меню (Off-Canvas) в Helix Ultimate может открываться как при клике на иконку "бургер", так и при свайпе. Использование обычного addEventListener('click') не всегда перехватывает свайпы или программные вызовы. MutationObserver отслеживает изменение атрибутов class и style у тега <body> и самого меню. Как только класс offcanvas-active появляется, скрипт гарантированно скрывает фиксированную полоску доставки.

Как устроена AJAX пагинация товаров в JoomShopping?

При клике на кнопку "Загрузить ещё", JavaScript отправляет фоновый GET-запрос к контроллеру категории с параметром limitstart, увеличенным на заданный шаг (например, +12). Сервер возвращает HTML-фрагмент со следующими товарами. Скрипт извлекает из ответа карточки товаров (.product-item) и "приклеивает" (append) их в конец контейнера #products-container, не перезагружая шапку и футер сайта.

Что за параметр `is-email="1" first="aW5mbw==" last="c2V2Y3ZldG9rLnJ1"` в коде?

Это работа плагина joomla-hidden-mail. Данный плагин защищает email-адреса от сбора (парсинга) спам-ботами. Реальный адрес разбивается на части (логин и домен), кодируется алгоритмом Base64 (aW5mbw==) и помещается в кастомный тег <joomla-hidden-mail>. При загрузке страницы в браузере, клиентский JavaScript (joomla-hidden-mail.min.js) декодирует Base64 и собирает кликабельную ссылку mailto:, которая невидима для ботов, читающих исходный HTML-код.

62 0 1
FAQ

Часто задаваемые вопросы

Ответы на популярные вопросы о наших услугах

Сколько стоит разработка сайта?

Стоимость зависит от сложности проекта и требуемого функционала. Простые сайты начинаются от 15 000 ₽, интернет-магазины — от 35 000 ₽. Точную стоимость рассчитаем после обсуждения задачи.

Сколько времени занимает разработка сайта?

В среднем разработка занимает от 2 до 6 недель. Простой Landing Page можно запустить за 7-14 дней, а сложный интернет-магазин или корпоративный портал потребует от 1 месяца работы.

На какой CMS вы работаете?

Мы специализируемся на разработке под Joomla 4, 5 и 6 версий. Также мы можем работать с другими популярными системами управления или кастомными PHP-решениями в зависимости от ваших задач.

Предоставляете ли вы поддержку после запуска?

Да, мы обеспечиваем гарантийную техническую поддержку всех наших проектов. Кроме того, вы можете заключить договор на регулярное обслуживание, обновление контента и мониторинг безопасности.

Можно ли заказать доработку существующего сайта?

Конечно. Мы проводим технический аудит текущего сайта, исправляем существующие ошибки, обновляем версию CMS и внедряем любой необходимый новый функционал.

Вы помогаете с наполнением контентом?

Да, в нашей команде есть копирайтеры и контент-менеджеры. Мы можем написать уникальные SEO-тексты, подобрать изображения и полностью заполнить каталог товаров или блог.

Делаете ли вы SEO-продвижение?

Базовая SEO-оптимизация (настройка мета-тегов, правильная структура заголовков) включена в процесс разработки. Для дальнейшего роста позиций мы предлагаем комплексное ежемесячное продвижение.

Как происходит оплата?

Оплата производится поэтапно. Обычно мы работаем по схеме: 50% предоплата перед началом работ, и оставшиеся 50% после полного утверждения и сдачи проекта.

Могу ли я заказать услуги по частям?

Да, услуги предоставляются гибко. Вы можете заказать только дизайн-макет, только верстку, настройку отдельного компонента или аудит производительности текущего проекта.

Разрабатываете ли вы собственные расширения (модули, плагины, компоненты)?

Да, мы создаем кастомные модули, плагины и компоненты под специфические бизнес-задачи, строго соблюдая стандарты архитектуры Joomla. Весь написанный код документируется. Дальнейшая техническая поддержка, обновление под новые версии CMS и масштабирование функционала осуществляются в рамках договора на регулярное сопровождение проекта.

Портфолио

Примеры выполненных работ

Показываем реальные сайты, которые мы реализовали для клиентов

Отзывы клиентов

Что говорят наши клиенты

Доверие и результат — лучшая оценка моей работы

4.6

Средняя оценка на основе
отзывов клиентов Яндекс

  • 100+ проектов завершено
  • 98% довольных клиентов
  • Рекомендации и повторные заказы
Оставить отзыв

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

Андрей Е.

Задача была следующая: нужно было обновить компонент sp page builder до последней версии, но так как стояла joomla 3, то нужно было обновить саму joomla, все компоненты и сам шаблон xelix. Работой остался доволен, так как задача была выполнена в сжатые сроки, в итоге скорость открытия сайта выросла, чему остался тоже доволен) Буду, если потребуется, обращаться еще!

Александр Борисов

Обращались к Олегу, чтобы обновить наш старый сайт с каталогом Виртуалмарта на Джумле 3 . Постоянно заливали вирусы через старые дыры, поэтому нужно было срочно переезжать на новую версию Joomla. Олег обновил всё до самой последней версии, полностью перенес всю базу с нашими товарами и статьями, чтобы ничего не потерялось. Написал новый чистый шаблон, подогнал его под наш привычный дизайн и убрал весь старый мусор с левыми плагинами. Отдельное спасибо, что бонусом добавил всякие важные мелочи по функционалу и отображению 👌🏻 В процессе были рабочие моменты и споры по внешнему виду, но всё оперативно решили. Работу Олег сдал вовремя без задержек в виде бэкапа, дальше будем уже сами не торопясь разворачивать и допиливать мелочи. Специалист грамотный, дело свое знает. Рекомендую 🤝👍🏻

HP - H.

Искал подрядчика по обновлению устаревшей Joomla 2.5 на современные стандарты. Многие предлагали делать магазин с нуля на других платформах, но Олег успешно провел масштабное обновление до Joomla 6.1 и обновил Joomshopping до актуальной версии 5.9.1. По факту за две недели работы над сайтом был разработан полностью новый адаптивный шаблон под PHP 8.4 с версткой под мобильные устройства, переработана база данных с чисткой от старого мусора и выстроена правильная структура URL. Исполнитель проявил высокую инициативность: помимо ТЗ, бонусом внедрил функционал, существенно улучшающий юзабилити. Корзина, списки желаний и сравнение товаров теперь работают через AJAX без перезагрузки страниц. Добавлен быстрый просмотр товаров, интерактивное мобильное меню и настроено два десятка кастомных модулей. По итогу сдачи проекта получил развернутый технический и SEO-аудит с подробными инструкциями по дальнейшей оптимизации, микроразметке и работе с контентом. Подход системный, гарантийные условия прозрачные. Уровень компетенции в архитектуре Joomla крайне высокий. Рекомендую для сложных e-commerce проектов. Будем продолжать сотрудничество.

Черный плащ

Обращаюсь к Олегу уже повторно, и снова остался доволен результатом. На этот раз стояла нетривиальная задача: обновить сайт до Joomla 5.3.4 и разработать кастомный плагин оплаты для банка Т. Сложность была в том, что оплата должна была работать внутри обычных материалов сайта, а не в стандартном интернет-магазине. Готовых аналогов такого решения просто не существует, поэтому задача была действительно сложной. Олег взялся за работу без колебаний. Я предоставил документацию от банка, а он всё реализовал на высшем уровне. Плагин получился удобным: легко устанавливается, настраивается и, что важно, позволяет отслеживать статус платежей прямо на сайте. Видно, что перед тобой настоящий профессионал. Отдельное спасибо за сопровождение: Олег подробно объяснил, как всё правильно настроить, и был на связи в процессе. Если вы ищете грамотного программиста и разработчика по Joomla, который может решить уникальную задачу, а не просто «поставить шаблон» — рекомендую Олега однозначно.

Юрий Подкопай