Миграция и разработка сайта по продаже промышленных станков для B2B: Переход на Joomla 5.2
В июне 2024 года был успешно реализован технически сложный проект по комплексной миграции, рефакторингу и глубокой модернизации корпоративного B2B-портала. Ресурс специализируется на сервисном обслуживании, подборе и прямых поставках из Европы высокоточного промышленного оборудования, включая лазерные, гибочные и координатно-пробивные станки TRUMPF, а также волоконные лазеры MetalTec и комплектующие ThermaCut.
В связи с полным прекращением официальной поддержки устаревшей ветки CMS Joomla 3.x, перед нами стояла критическая задача: осуществить бесшовный перенос огромного массива данных интернет-магазина на самую современную и безопасную платформу Joomla 5.2.0, работающую под управлением строгих стандартов PHP 8.2. Проект потребовал не просто обновления файлов, а фактической пересборки архитектуры сайта с сохранением всего накопленного SEO-трафика, переработкой шаблона и обновлением экосистемы компонентов.

Исходная ситуация, проблематика и бизнес-задачи
Сайт по продаже сложного промышленного оборудования кардинально отличается от классического розничного интернет-магазина. Здесь присутствуют длинные циклы сделки, запросы цен по спецификациям, мультивалютное ценообразование и необходимость работы с зарубежными партнерами. Исходный сайт на Joomla 3.x столкнулся со следующими проблемами:
- Критическая уязвимость ядра и несовместимость старых плагинов с современными версиями PHP (8.0+).
- Накопление технического долга в базе данных, ошибки в работе фильтра товаров и корзины.
- Проблемы с отображением интерфейса на современных мобильных устройствах (устаревшие CSS-фреймворки).
- Некорректная обработка нулевых цен (когда товар поставляется "под заказ") в устаревшей версии компонента JoomShopping.
- Риск потери поисковых позиций при смене структуры URL-адресов.
Ключевая задача заключалась в проведении "тихой" миграции (Услуга по обновлению Joomla): полная замена "двигателя" сайта "на ходу" без остановки бизнес-процессов компании и без потери проиндексированных страниц в Яндекс и Google.
Реализация миграции: Ядро Joomla 5.2 и База данных
Прямой переход с Joomla 3 на Joomla 5 невозможен из-за кардинальных изменений в архитектуре фреймворка (удаление JRequest, переход на Namespaces, внедрение подготовленных запросов PDO). Процесс миграции выполнялся в несколько этапов:
- Аудит и очистка БД: Перед переносом база данных была очищена от таблиц "мертвых" и неиспользуемых расширений.
- Перенос таблиц и маршрутизации: Выполнен экспорт и адаптация таблиц пользователей, материалов (com_content) и категорий. Самым важным этапом стало сохранение структуры таблицы
#__menuи алиасов, что гарантировало 100% сохранение всех старых URL-адресов. Перенастройка 301 редиректов не потребовалась, так как адреса остались неизменными, что позволило сохранить весь SEO-трафик. - Переход на PHP 8.2: Серверное окружение было жестко сконфигурировано под PHP 8.2. Все кастомные скрипты и переопределения шаблонов (overrides) были переписаны с устранением deprecated-функций и предупреждений строгой типизации.
Модернизация B2B-коммерции: JoomShopping 5.5.2
Основой каталога станков и запчастей является система электронной коммерции JoomShopping. Модуль был обновлен до актуальной версии 5.5.2, что потребовало ручной адаптации функционала.
Рефакторинг ценообразования и нулевых цен
В промышленном B2B-секторе часто встречаются товары со статусом "Цена по запросу" (в базе данных цена равна 0). В старых версиях это вызывало ошибки вывода. Были изменены глобальные настройки JoomShopping с использованием нового встроенного функционала обработки цен. Теперь товары с ценой =0 корректно отображают запрограммированные текстовые статусы вместо нулей, позволяя клиентам запросить индивидуальное коммерческое предложение. Также была сохранена и оптимизирована работа встроенного AJAX-скрипта (reloadPriceInList), который динамически пересчитывает цену при выборе атрибутов товара без перезагрузки страницы.
Мультивалютность
В связи с импортом оборудования из Европы (Германия) на сайте реализован мультивалютный переключатель (id_currency). Клиенты могут в один клик пересчитывать стоимость огромных промышленных комплексов и мелких запчастей в Рублях (RUB), Евро (EUR), Долларах (USD) и альтернативных валютах (EURT) в режиме реального времени. Базовая валюта интернет-магазина привязана к актуальному курсу, который администрируется из панели управления.
Замена корзины и модуля фильтрации
Многие старые модули JoomShopping оказались несовместимы с архитектурой Joomla 5. Был полностью заменен модуль корзины (jshop_module_cart) на современный аналог, совместимый с новыми стандартами.
Отдельное внимание уделено товарному фильтру. На этапе миграции был восстановлен и стилизован базовый фильтр JoomShopping. Однако, для работы с десятками тысяч позиций запчастей (линзы, дюзы, фильтры) архитектурно подготовлена база для внедрения премиального расширенного фильтра (Filter Product Extended от Webdesigner-profi или Универсального фильтра от Nevigen). Развертывание платного фильтра привязано к лицензированию на конкретный домен и может быть интегрировано по запросу клиента без изменения ядра сайта.
Мультиязычность и Гео-таргетинг
Компания работает не только на рынке России и СНГ, но и взаимодействует с европейскими партнерами. На сайте полностью настроена и функционирует нативная мультиязычность Joomla (модуль mod_languages).
- Доступны три языковые версии: Русская (ru-RU), Немецкая (de-DE) и Английская (en-GB).
- Для поисковых систем внедрены корректные теги
hreflang(например:<link href="https://stanko-service.su/de/" rel="alternate" hreflang="de-DE">). Это исключает дублирование контента в глазах Google и позволяет поисковику направлять пользователя на релевантную языковую версию в зависимости от его локации и настроек браузера.
Обновление экосистемы компонентов
Для обеспечения комплексной работоспособности портала был обновлен и лицензирован целый ряд критически важных расширений:
- Convert Forms: Использован для создания современных асинхронных форм захвата лидов. В частности, в подвале сайта реализована форма подписки на рассылку новостей индустрии. Форма работает по AJAX, имеет встроенную валидацию email-адресов и защиту от спам-ботов, а стили формы управляются через CSS-переменные напрямую из админки.
- JSitemap (PRO): Генератор XML-карт сайта последнего поколения. Обеспечивает мгновенную индексацию новых поступлений станков в поисковых системах.
- Google Structured Data: Компонент для автоматической генерации JSON-LD микроразметки. Передает поисковикам Яндекса и Google структурированные данные о товарах (Schema.org/Product), статьях (Schema.org/Article) и самой компании, формируя расширенные красивые сниппеты в поисковой выдаче.
- RSFirewall: Брандмауэр веб-приложений (WAF). Защищает сайт на PHP 8.2 от SQL-инъекций, XSS-атак и попыток несанкционированного доступа в административную панель.
- JLike: Обновленный компонент для социальных взаимодействий и закладок внутри каталога.
- RSForm: Инструмент для генерации сложных многостраничных форм (заявки на лизинг, запросы на сервисное обслуживание станков AMADA и TRUMPF).
Frontend: UI/UX, Адаптивность и Скрипты
Пользовательский интерфейс прошел глубокий рефакторинг с целью корректного отображения на мобильных устройствах, планшетах и широкоформатных мониторах.
- Сетка и стили: Шаблон переведен на использование Bootstrap 4.1.1. Внедрена строгая блочная структура (CSS Grid / Flexbox) для каталога товаров и сетки новостей.
- Динамические слайдеры: Устаревшие библиотеки каруселей заменены на современный, легкий и сенсорно-адаптивный Swiper JS (версии 11.1.14). Свайпер используется в модуле рекомендуемых товаров (
mod_wtjshoppingswipercarousel195), обеспечивая плавную прокрутку на смартфонах. - Иконки и Пиктограммы: Интегрирован актуальный набор FontAwesome 5. Была решена проблема с кэшированием старых пиктограмм — после сброса кэша браузера новые векторные иконки корректно отображаются на Retina-дисплеях без потери качества.
- Мобильная навигация: Разработано два независимых хедера:
<header class="mobile-hidden">для десктопов и<header class="mobile">для смартфонов. Мобильная версия содержит компактные dropdown-меню для переключения языков, валют и доступа к форме авторизации. - Мессенджеры: Внедрен плавающий виджет WhatsApp (
mod_jo_whatsapp_contact_button), который автоматически определяет тип устройства (с помощью регулярного выражения в JavaScript/Android|webOS|iPhone.../) и открывает соответствующее приложение или веб-версию чата для быстрой связи с отделом продаж.
Оптимизация хранения данных и архитектура бэкапов
В рамках проекта был проведен аудит серверного пространства. Каталог интернет-магазина (особенно раздел запчастей) планируется расширять путем парсинга десятков тысяч товарных позиций.
Для предотвращения критического разрастания размера сайта были внедрены новые правила архитектуры хранения медиафайлов. Выполнена реструктуризация каталогов изображений JoomShopping, чтобы визуальные ассеты товаров хранились изолированно от системных изображений ядра Joomla.
Эта инженерная практика позволяет настраивать инкрементальное резервное копирование (Backups) базы данных и системных файлов отдельно от многогигабайтного архива картинок товаров. Это значительно снижает нагрузку на сервер при создании ночных дампов и ускоряет процесс восстановления системы в случае сбоев.
Использованные технологии
| Технология / Стек | Версия | Роль в проекте |
|---|---|---|
| Joomla! | 5.2.0 | Базовое ядро CMS, роутинг, управление правами (ACL), мультиязычность. |
| PHP | 8.2 | Высокопроизводительная и безопасная серверная среда. |
| JoomShopping | 5.5.2 | E-commerce платформа, B2B каталог станков, мультивалютность. |
| Swiper JS | 11.1.14 | Организация адаптивных touch-слайдеров и товарных каруселей. |
| Convert Forms / RSForm | Latest | Генерация AJAX-форм обратной связи и сбора лидов. |
| Bootstrap / FontAwesome | 4.1.1 / 5.1 | Frontend-фреймворк, адаптивная сетка и векторная графика. |
Итоги внедрения
Миграция B2B-портала на Joomla 5.2 и PHP 8.2 обеспечила компании надежную, отказоустойчивую технологическую платформу на ближайшие 5-7 лет. Устранены критические уязвимости старого ядра, полностью сохранен ценный органический поисковый трафик благодаря сохранению структуры URL, а переработанный каталог JoomShopping готов к масштабированию и импорту неограниченного числа товарных спецификаций.
Развернуть полный вид сайта по продаже промышленных станков на Джумле 5

Примечание: текущее состояние и внешний вид действующего сайта могут отличаться от представленных в данном кейсе, так как после завершения и сдачи проекта заказчик мог внести самостоятельные изменения.
Вопросы и ответы по данному сайту
Почему потребовалось переписывать шаблон при миграции с Joomla 3 на Joomla 5?
Joomla 5 использует обновленную архитектуру и новые веб-стандарты (например, полный отказ от jQuery в ядре в пользу чистого Vanilla JS, новые классы Bootstrap 5). Шаблоны от Joomla 3 содержат вызовы устаревших PHP-функций и старых библиотек, что вызывает фатальные ошибки на PHP 8.2. Рефакторинг шаблона — обязательный этап адаптации внешнего вида под новые стандарты рендеринга CMS.
Как работает AJAX-обновление цены в карточке товара?
В JoomShopping интегрирован скрипт reloadPriceInList. Когда клиент меняет атрибут товара (например, выбирает другую линзу или модификацию станка), JavaScript перехватывает событие onchange и отправляет скрытый (AJAX) запрос к контроллеру product с параметром task=ajax_attrib_select_and_price. Сервер возвращает новый массив цен в формате JSON, и скрипт мгновенно обновляет цифру в DOM-дереве без перезагрузки страницы.
Зачем нужен Тег Rel Canonical, упомянутый в рекомендациях?
В крупных интернет-магазинах один и тот же товар может быть доступен по разным адресам (например, при использовании фильтров, сортировок или если товар лежит в нескольких категориях). Тег <link rel="canonical" href="/..."> указывает поисковым системам Яндекса и Google главную, приоритетную версию страницы, предотвращая пессимизацию сайта за дублирование контента.
Почему модуль корзины был полностью заменен?
Старые модули корзины для JoomShopping часто писались сторонними разработчиками и использовали устаревшие классы Joomla 3 (например, `JFactory::getApp()`). При переходе на Joomla 5 архитектура требует использования пространств имен (Namespaces). Проще и надежнее установить новый, написанный с нуля модуль корзины, чем пытаться пропатчить код десятилетней давности.
Как реализована защита от спама в формах Convert Forms?
Convert Forms использует встроенные механизмы Honeypot (скрытые поля, которые заполняют только боты) и интеграцию с современными капчами (например, Google reCAPTCHA v3 или Cloudflare Turnstile). Это позволяет блокировать 99% спам-заявок "тихо", не заставляя реальных клиентов разгадывать картинки со светофорами.
Почему так важно хранить картинки JoomShopping отдельно от картинок ядра Joomla?
Если планируется автоматический парсинг (импорт) десятков тысяч запчастей, объем папки с изображениями может вырасти до десятков гигабайт. Если эти изображения лежат в общей директории /images/, стандартные системы резервного копирования Joomla (например, Akeeba Backup) будут "задыхаться" при создании архива, что приведет к тайм-аутам сервера. Изоляция файлов в директории компонента позволяет исключить их из ежедневного бекапа ядра и бэкапить отдельно (например, раз в месяц напрямую через панель хостинга).