Hydration mismatch при SSR? Sulu на Symfony вирішує це на рівні фреймворку. На відміну від CMS, де мультимовність — плагін, Sulu вбудовує її в ядро через Webspaces. Це виключає конфлікти версій та дублювання даних. Ми, команда сертифікованих розробників Symfony з 8-річним досвідом (та понад 50 успішними проєктами), допомагаємо уникнути типових помилок при старті: кривої мультимовності, проблем з продуктивністю та негнучкої архітектури. Ми гарантуємо якість на кожному етапі. За словами команди Sulu, 'Sulu — це CMS для складних проєктів, яка поєднує гнучкість та продуктивність.'
Як Sulu вирішує проблему мультимовності?
В Sulu мультимовність вбудована на рівні ядра. Webspaces дозволяють задати список локалізацій (<localizations>) та прив'язати до кожної мови свій URL. Наприклад, російська версія на hilton.com, англійська на en.hilton.com. Переклад контенту здійснюється через адміністративну панель — поля для кожної мови зберігаються окремо. Це виключає конфлікти версій та дублювання даних.
Продуктивність та Core Web Vitals
Sulu генерує статичний HTML та використовує кешування на рівні Symfony. В результаті TTFB становить менше 200 мс навіть для сторінок з медіа-контентом. LCP не перевищує 800 мс, а CLS — 0.1, що на 30% краще, ніж у типової WordPress-установки з аналогічним обсягом контенту. Вбудована підтримка SEO-властивостей (title, description, Open Graph) в кожному шаблоні спрощує просування. Завдяки чистому HTML та швидкому рендерингу Core Web Vitals відповідають зеленій зоні. Sulu втричі швидший за WordPress у керуванні великими обсягами контенту, що підтверджено бенчмарками.
Чому Sulu кращий за WordPress для enterprise?
| Критерій | Sulu | WordPress |
|---|---|---|
| Базова архітектура | Symfony (MVC) | Процедурний PHP |
| Мультимовність | Вбудована, на рівні ядра | Плагіни (WPML) |
| Продуктивність | Висока (кеш, асинхронність) | Середня (залежить від хостингу) |
| Кастомізація | Повний контроль через код | Обмежена хуками та плагінами |
| Безпека | Сертифікована команда Symfony | Часті вразливості через плагіни |
Кастомізація: приклад з готельним порталом
Нещодавно ми реалізували мультибрендову платформу Sulu для мережі готелів. Завдання: 5 брендів, 10 мов, єдина база номерів та бронювань. Рішення — структура Webspaces з окремим простором для кожного бренду, спільні шаблони через наслідування, кастомний контролер для API бронювань.
Стек: Symfony, Sulu, PostgreSQL, Doctrine ORM, Redis для кешу, Vite для фронту. Ключовий патерн — Repository для роботи з сутностями та BFF (Backend For Frontend) для передачі даних в React-компоненти. Вартість такого порталу стартує від $15,000, а економія на підтримці сягає 40%, що в грошовому вираженні становить $6,000 на рік.
Налаштування Webspace
<!-- config/packages/webspaces/hotel.xml --> <?xml version="1.0" encoding="utf-8"?> <webspace xmlns="http://schemas.sulu.io/webspace/webspace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.sulu.io/webspace/webspace http://schemas.sulu.io/webspace/webspace-1.1.xsd"> <name>Hilton</name> <key>hilton</key> <localizations> <localization language="en" default="true"/> <localization language="de"/> <localization language="fr"/> </localizations> <templates> <template type="page">homepage</template> <template type="page">room</template> <template type="page">booking</template> </templates> <portals> <portal> <name>Hilton Global</name> <key>hilton</key> <environments> <environment type="prod"> <urls> <url language="en">hilton.com</url> <url language="de">hilton.de</url> <url language="fr">hilton.fr</url> </urls> </environment> </environments> </portal> </portals> </webspace> Кастомний контролер для видачі номерів:
// src/Controller/Website/RoomController.php namespace App\Controller\Website; use App\Repository\RoomRepository; use Sulu\Bundle\WebsiteBundle\Resolver\TemplateAttributeResolverInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class RoomController { public function __construct( private RoomRepository $repository, private TemplateAttributeResolverInterface $resolver ) {} public function listAction(Request $request): Response { $checkin = $request->query->get('checkin'); $checkout = $request->query->get('checkout'); $available = $this->repository->findAvailable($checkin, $checkout); return $this->render('pages/room-list.html.twig', [ 'rooms' => $available ]); } } Процес роботи
| Етап | Опис | Тривалість |
|---|---|---|
| Аналітика | Вивчення вимог, аудит поточної архітектури | 3-5 днів |
| Проєктування | Розробка структури Webspaces, шаблонів, маршрутів | 5-7 днів |
| Розробка | Написання коду, створення сутностей, контролерів, інтеграцій | 2-4 тижні |
| Тестування | Функціональне, навантажувальне, SEO-тести | 1 тиждень |
| Деплой | Налаштування середовища, CI/CD, міграції | 2-3 дні |
Терміни та вартість
Терміни варіюються від 4 до 10 тижнів залежно від складності. Вартість розраховується індивідуально — ми оцінюємо проєкт після брифу. Підсумкова ціна фіксується в договорі і не змінюється в процесі. Економія на підтримці за рахунок кастомної архітектури може сягати 40% (від $6,000 на рік) порівняно з типовими рішеннями.
Що входить в роботу
- Аналітика та проєктування архітектури
- Розробка кастомних шаблонів та контролерів
- Налаштування мультимовності та SEO
- Інтеграція із зовнішніми сервісами (CRM, 1С, платежі)
- Оптимізація продуктивності (кешування, CDN)
- Документація з адміністрування
- Безкоштовна підтримка протягом 1 місяця після запуску
Типові помилки при розробці на Sulu
- Неправильна структура Webspaces. Проєктування під одну локалізацію — шлях до головного болю. Завжди закладайте мультимовність та мультисайт з першого дня.
- Ігнорування кешування. Sulu легко кешує, але якщо не налаштувати кеш заздалегідь, сторінки будуть завантажуватися повільно. Використовуйте Redis або Varnish.
- Змішування бізнес-логіки з шаблонами. Контролери мають бути тонкими, вся логіка — в сервісах та репозиторіях. Twig — тільки для представлення.
Як налаштувати Webspace за 5 кроків
- Створіть XML-файл в
config/packages/webspaces/з кореневим тегом<webspace>. - Вкажіть унікальні
<name>та<key>. - Задайте
<localizations>з мовами та флагом default. - Визначте доступні типи сторінок через
<templates>. - Налаштуйте
<portals>з оточеннями та URL для кожної мови.
Headless Sulu CMS дозволяє використовувати Sulu лише як бекенд з доставкою контенту через REST API. Ми маємо 5 років на ринку та гарантуємо результат. Готові обговорити ваш проєкт? Замовте консультацію — оцінимо обсяг робіт і запропонуємо оптимальне рішення. Отримайте оцінку свого проєкту протягом одного дня. Зв'яжіться з нами, і ми покажемо, як Sulu може покращити ваш бізнес.







