Инженерная разработка, миграция на Joomla 6 и архитектурный рефакторинг: B2B-портал производственной компании

Проект представляет собой глубокую инфраструктурную модернизацию и перепроектирование масштабного веб-ресурса крупного рекламно-производственного предприятия. Работы, реализованные в янвере 2026 года, заключались в транзиции экосистемы с критически устаревшей версии ядра 3.10.12 на передовую архитектуру CMS Joomla 6.0.2. Технологический фундамент был строго оптимизирован под интерпретатор PHP 8.4 с активированным JIT-компилятором и СУБД MySQL 8+. Ключевым направлением работ, помимо развертывания каталога на базе JoomShopping 5.9 и масштабного контент-инжиниринга (генерация 319 000 символов), стала разработка сложной кастомной экосистемы из 24 независимых функциональных модулей, обеспечивающих маршрутизацию, лидогенерацию и визуальную презентацию производственных мощностей.
Исходная архитектура и техническая проблематика
До старта интеграции цифровой актив заказчика функционировал на legacy-коде. Использование монолитной архитектуры Joomla 3.x создавало узкие места в производительности, а устаревший синтаксис PHP исключал возможность использования современных криптографических стандартов. Основные технические задачи проекта:
- Безопасная конвертация и миграция таблиц базы данных с сохранением исторического органического трафика и перестроением иерархии URL.
- Проектирование E-commerce среды B2B-сегмента на основе компонента JoomShopping 5.9 без функционала корзины, с упором на сбор сложных специфицированных заявок.
- Программирование с нуля 24 изолированных модулей расширения для управления сеткой макета (Grid Layout) и взаимодействия с пользователем.
- Глубокий рефакторинг контента: удаление неактуальных расширений, перенос галерей на SP Easy Image Gallery и разработка сотен тысяч символов технической документации.
Комплексная миграция базы данных и ядра
Миграция между ветками 3.x и 6.x потребовала написания специализированных SQL-скриптов для трансформации структур таблиц. База данных MySQL 8+ была переведена на кодировку utf8mb4_unicode_ci для корректной поддержки современных символьных наборов. Инженеры провели полный рефакторинг дерева категорий. Сформированы семантически корректные ЧПУ (SEF URL), устраняющие дублирование страниц, характерное для старых версий CMS. Для гарантии отказоустойчивости были созданы две независимые версии бэкапов (архивный слепок 3.10.12 и чистый инсталлятор 6.0.2). Выполнена тотальная очистка кодовой базы: удалены невостребованные расширения, старые материалы и пустые категории, генерировавшие ошибки 404. Внедрено расширение OSMap Free для динамической генерации XML-карты сайта, автоматически учитывающей новые правила маршрутизации.
Внедрение E-commerce: Архитектура JoomShopping 5.9
Информационный ресурс был трансформирован в высоконагруженный производственный каталог. Интегрирован компонент JoomShopping 5.9. Развернута сложная топология: сформирована структура из 114 узловых категорий, охватывающих полный цикл производства от лазерной резки до полиграфии. Для товаров настроена система вариативных атрибутов (плотность, материал, типы креплений). Произведено переопределение макетов (Template Overrides) компонента JoomShopping под стандарты нового графического шаблона, написанного для PHP 8.4+. Интегрирован компонент SP Easy Image Gallery, заменивший уязвимое платное приложение для вывода галерей выполненных работ с поддержкой адаптивных Masonry-сеток.
Контент-инжиниринг и SEO-проектирование
Для обеспечения доминирования в органической выдаче по B2B-запросам реализован беспрецедентный объем текстовой оптимизации:
- Написан структурированный технический контент общим объемом более 319 000 символов (без учета пробелов) для всех 114 категорий действующего каталога.
- Сгенерированы персонализированные мета-теги (Title, Description) с интеграцией LSI-ключей для каждой страницы каталога.
- Спроектированы и наполнены новые посадочные хабы: «Разработка дизайн-макетов», «Монтаж наружной рекламы», «Помощь», «Оплата и возврат», «Гарантии», «Доставка».
- Создана масштабная база знаний «Вопросы и ответы», включающая 105 индивидуально проработанных экспертных вопросов, оформленных через CSS-аккордеоны. Обновлена страница «Требования к макетам» с указанием строгих спецификаций препресса.
Глубокая разработка модульной архитектуры
Важнейшим этапом обновления стала разработка 24 функциональных модулей. Отказ от тяжелых page-билдеров в пользу нативных модулей Joomla 6.0.2 позволил достичь показателей Core Web Vitals в зеленой зоне (95+ баллов). Модули были разделены на логические кластеры.
Кластер 1: Поиск и навигационная маршрутизация
Навигация крупного портала требует мгновенного отклика. Разработаны следующие модули:
- Поиск по сайту: Центральный модуль поиска, интегрированный с механизмом Smart Search (com_finder) Joomla 6. Оснащен AJAX-подсказками и дебаунсингом (debouncing) для снижения нагрузки на БД при вводе текста.
- Кнопка поиска: Легковесный модуль, внедренный в структуру навигационного меню. По клику инициализирует раскрытие полноэкранного поискового оверлея.
- Главные категории: Модуль динамического вывода плитки основных направлений производства на главной странице с подгрузкой индивидуально разработанных SVG-изображений.
- Наши услуги: Боковой навигационный модуль типа "Аккордеон", генерирующий древовидную структуру услуг на основе вложенности категорий JoomShopping.
- Производство / Информация клиентам: Модули Footer-меню, жестко фиксирующие иерархию служебных ссылок. Используют кэширование на уровне ядра для мгновенной отдачи HTML.
- Хлебные крошки (Breadcrumbs): Модуль навигационной цепочки. Код переопределен для внедрения строгой микроразметки Schema.org/BreadcrumbList, обеспечивающей формирование расширенных сниппетов в выдаче Google и Яндекс.
Кластер 2: Формы захвата и лидогенерация
Система сбора заявок спроектирована с учетом защиты от ботнетов и требований законодательства:
- Форма обратной связи / Форма обратного звонка / Обратный звонок: Разработаны три независимых модуля на базе AJAX. Внедрена строгая клиентская и серверная валидация: установлена регулярная маска для полей телефона (формат
+7(999) 999-99-99). Интегрирована технология Google reCAPTCHA v3. Запросы обрабатываются через XMLHttpRequest (XHR) без перезагрузки страницы. - В соответствии со статьей 437 ГК РФ: Текстовый модуль, выводящий юридический дисклеймер. Реализован как глобальный блок с привязкой к позиции в подвале сайта.
Кластер 3: Презентационные и маркетинговые модули
Для повышения показателя конверсии (CR) и формирования доверия (Social Proof) разработаны визуально сложные компоненты:
- Каждый день мы изготавливаем: Модуль инфографики. Написан Vanilla JS скрипт, использующий
IntersectionObserver. При скролле до блока запускается плавная анимация счетчиков от нуля до заданных значений (кол-во баннеров, вывесок). - НАШИ ПРЕИМУЩЕСТВА / Почему выбирают нас: Модули вывода триггеров доверия. Сверстаны с применением CSS Grid Layout. Интегрированы иконки FontAwesome 6 Free с использованием псевдоэлементов
::beforeдля минимизации HTML-кода. Настроены CSS-транзиции для создания эффектов плавного подъема (hover states). - Наше оборудование для наружной рекламы: Модуль-слайдер. Интегрирована легковесная библиотека Swiper.js. Реализована ленивая загрузка (Lazy Loading) фотографий станков и плоттеров, что экономит пропускную способность канала.
- Как заказать: Пошаговый модуль визуализации бизнес-процесса. Построен на Flexbox, адаптируется от горизонтальной линии (ПК) до вертикального стека (мобильные).
- Наши клиенты: Модуль логотипов партнеров. Использован CSS-аниматор бесконечной бегущей строки (Marquee) с остановкой при наведении курсора (pause-on-hover).
Кластер 4: Контактные данные, мобильная среда и интеграции
Адаптация под смартфоны и сторонние сервисы потребовала создания изолированных блоков:
- Наши координаты / Рады вас услышать / Рады увидеть вас: Три логически разделенных модуля контактов. Внедрена микроразметка Schema.org/LocalBusiness. Номера телефонов обернуты в протокол
tel:, email вmailto:. Добавлена интеграция Яндекс.Карт через API с отложенной инициализацией. - Телефон в моб. Меню: Специфический модуль, рендерящийся исключительно при разрешении экрана ниже 991px. Обеспечивает доступность кнопки вызова (Call-to-Action) в липком мобильном оффканвас-меню.
- Jivo: Модуль интеграции онлайн-чата JivoSite. Скрипт загружается с атрибутом
defer, предотвращая блокировку рендеринга страницы (Render-Blocking Resources). - Метрика Яндекс: Модуль внедрения аналитического кода. Настроен с учетом режима асинхронной загрузки и трекинга электронной коммерции (Ecommerce tracking) для JoomShopping.
- Соглашение с политикой: Модуль Cookie-баннера. Отображается в нижней части экрана. Написан JS-скрипт, записывающий согласие пользователя в
localStorageна 365 дней, скрывающий блок после клика. Текст содержит обязательную ссылку на Политику обработки персональных данных.
Технологический стек
| Технология / Компонент | Версия | Назначение в архитектуре |
|---|---|---|
| Joomla CMS | 6.0.2 | Ядро управления, MVC-маршрутизация, управление модулями |
| PHP | 8.4 | Высокопроизводительный серверный компилятор |
| MySQL | 8.0+ | СУБД с поддержкой сложных реляционных запросов и JSON |
| JoomShopping | 5.9 | E-commerce логика, структура каталога, атрибутика |
| SP Easy Image Gallery | Latest | Управление медиаконтентом и адаптивными галереями |
| Vanilla JS (ES6+) | - | Клиентская логика: AJAX, Observer API, маски ввода |
Результаты инженерной модернизации
Обновление B2B-портала на Joomla 6.0.2 с переписыванием модульной экосистемы обеспечила заказчику кратный рост производительности. Разработка 24 изолированных модулей позволила полностью отказаться от тяжеловесных конструкторов макетов. Внедрение строгих масок ввода формата +7(999) 999-99-99 и юридических дисклеймеров полностью защитило ресурс от спама и правовых рисков. Гигантский объем сгенерированного текста (319+ тыс. символов) вкупе с 105 вопросами FAQ создал прочный фундамент для монополизации органической выдачи.
Развернуть полный вид обновленного сайта рекламно-производственной компании

Примечание: текущее состояние и внешний вид действующего сайта могут отличаться от представленных в данном кейсе, так как после завершения проекта заказчик самостоятельно управляет контентом.
FAQ: Вопросы по архитектуре и разработке модулей Joomla 6
Почему для организации каталога выбран JoomShopping 5.9, а не штатные материалы Joomla?
Это было основным требования заказчика, поскольку у него уже был каталог на старой версии JoomShopping, также стандартные материалы (Articles) не предназначены для электронной коммерции. JoomShopping 5.9 обеспечивает строгую иерархию, поддержку товарных атрибутов (размер, материал, тираж), возможность массового импорта/экспорта цен и легкую интеграцию с системами учета. Это превращает обычный сайт-визитку в мощный инструмент продаж.
В чем смысл создания 105 уникальных вопросов и ответов (FAQ)?
Во-первых, это радикально снижает нагрузку на менеджеров — клиенты находят ответы на типовые вопросы о сроках, материалах и доставке самостоятельно. Во-вторых, каждый вопрос — это низкочастотный поисковый запрос (LSI). Страница с таким объемом структурированного текста получает высочайший траст в поисковых системах и генерирует стабильный целевой трафик.
Почему было необходимо написать нового текста?
Поисковые алгоритмы (Яндекс, Google) ранжируют страницы на основе релевантности и полноты раскрытия темы. 114 пустых категорий каталога были бы восприняты как «мусорные» (Thin Content). Создание уникального, экспертного описания для каждого раздела производства гарантирует выход в ТОП выдачи по коммерческим запросам в регионе заказчика.
Зачем переходить на PHP 8.4, если старый сайт работал?
Поддержка старых версий PHP прекращена, что открывает двери для хакерских атак. PHP 8.4 включает механизм JIT-компиляции (Just-In-Time), который ускоряет выполнение сложных скриптов (например, генерацию каталога JoomShopping) до 30-40%. Это напрямую влияет на скорость загрузки, что является официальным фактором ранжирования.
В чем выгода замены платной галереи на бесплатную SP Easy Image Gallery?
Устаревшее платное расширение больше не получало обновлений безопасности от разработчика, тормозило загрузку страниц и конфликтовало с PHP 8.4. Переход на SP Easy Image Gallery обеспечил чистый код, адаптивность под мобильные устройства, безопасность и отсутствие необходимости ежегодно платить за лицензию без потери функционала.
В чем фундаментальное отличие разработки модулей для Joomla 6 от Joomla 3?
В Joomla 6 внедрена строгая архитектура пространств имен (Namespaces) и Dependency Injection. Если в Joomla 3 модули представляли собой простые PHP-файлы, включенные через require, то в Joomla 6 требуется создание класса Dispatcher (например, Site\Module\MyModule\Site\Dispatcher\Dispatcher) и файла Helper, наследующего методы ModuleHelper. Это требует более строгого объектно-ориентированного подхода (ООП), но обеспечивает безопасность и скорость работы кода в среде PHP 8.4.
Как решалась проблема с кешированием динамических данных в модулях?
Для статических модулей («437 ГК РФ», «Координаты») в XML-манифесте задан параметр cache="1" для прогрессивного кеширования. Однако для форм обратной связи кэш жестко отключен на уровне класса ($cache->setCaching(false)), так как кэширование скрытых CSRF-токенов привело бы к ошибке "Invalid Token" при отправке формы. Это тонкая грань настройки модульной архитектуры Joomla.
Почему модуль «Хлебные крошки» потребовал доработки?
Стандартный модуль mod_breadcrumbs генерирует простой HTML-список. Для современного SEO этого недостаточно. Мы создали переопределение макета (override) в папке html/mod_breadcrumbs/ нашего шаблона. В код были внедрены атрибуты itemscope, itemtype="https://schema.org/BreadcrumbList" и itemprop="position". Это позволяет поисковым роботам безошибочно понимать вложенность каталога JoomShopping.
Каким образом скрипт счетчика в модуле «Каждый день мы изготавливаем» не замедляет страницу?
Применен JavaScript-интерфейс IntersectionObserver. Скрипт модуля не делает никаких вычислений при загрузке страницы. Он лишь "наблюдает" за DOM-элементом. Как только блок попадает в область видимости окна браузера (viewport), Observer генерирует событие, запускающее функцию инкрементации чисел. Это экономит ресурсы основного потока (Main Thread).
Почему модули «Метрика Яндекс» и «Jivo» были написаны как отдельные расширения, а не вставлены в шаблон?
Внедрение JS-скриптов напрямую в index.php шаблона — плохая практика, нарушающая логику MVC. Создание изолированных модулей позволяет администратору сайта гибко управлять их выводом: например, отключать онлайн-чат (Jivo) на страницах политики конфиденциальности или корзины, просто меняя привязку модуля к пунктам меню в админ-панели Joomla.
Как реализована маска телефона в формах без подключения тяжелого jQuery?
Вместо использования устаревших плагинов вроде jquery.maskedinput, мы написали легковесную регулярную функцию на чистом ECMAScript 6. При событии input скрипт удаляет все нечисловые символы и форматирует строку согласно паттерну +7 ($1) $2-$3-$4, блокируя отправку данных (prevent default), если длина строки не соответствует 11 символам.
Что представляет собой модуль «Главные категории» технически?
Это кастомный модуль (Custom HTML с поддержкой PHP), который динамически опрашивает таблицы JoomShopping (#__jshopping_categories). Он извлекает названия категорий верхнего уровня, их ссылки и ассоциированные SVG-иконки. Использование объектно-реляционного отображения (ORM) Joomla 6 через Factory::getContainer()->get(DatabaseInterface::class) гарантирует безопасность SQL-запроса.
Как реализовано «Соглашение с политикой» с точки зрения хранения данных?
Модуль генерирует плашку предупреждения о Cookie. Кнопка «Согласен» привязана к EventListener. При клике JavaScript создает запись в window.localStorage со значением cookieConsent=true и временной меткой. При каждой загрузке страницы скрипт модуля мгновенно проверяет наличие ключа. Если ключ есть, DOM-узел плашки удаляется еще до окончания рендеринга страницы, предотвращая скачки макета (CLS).