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

Инженерная разработка, миграция на 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).

61 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, который может решить уникальную задачу, а не просто «поставить шаблон» — рекомендую Олега однозначно.