До сих пор у нас всегда было так: простые сайты, особенно блоги — на WordPress, что-то нестандартное — в зависимости от задачи, но часто на Symfony.
Но сегодня, на волне двух последних проектов на Symfony, захотелось не выныривать из него, и сделать сайт-визитку на этом фреймворке, а не на вордпрессе, как обычно. Но нужно сделать это так, чтобы клиенту было удобно, а трудозатрат было по минимуму.
Посмотрим, куда нас это приведет.
Так как у нас самый простой (и дешевый) сайт-визитка, то дизайн покупаем на themeforest. Это самая простая html тема, одобренная заказчиком. WordPress темы мы не рассматриваем, так как есть печальный опыт за бóльшие деньги получения жутко тормозящего нечто, из которого потом несколько дней вручную выпиливать лишние плагины.
Таким образом, на этапе покупки шаблона разницы никакой — и под WordPress, и под Symfony покупаем простой html шаблон.
Пересобираем купленный шаблон под webpack, чтобы можно было без проблем использовать препроцессоры css и новый стандарт js. Webpack Encore от Symfony тут — очень хороший помощник. Все завелось, собралось и работает с полпинка.
Разбираем шаблон на кусочки под twig, верстаем основные страницы. Так как структура сайта и основный контент были получены в качестве ТЗ от заказчика, проблем с контентом не возникает, и это просто прекрасно!
Ура, все готово, работает, можем переходить к бэкэнду 😉
Основная наша задача на бэкэнде — создать такую панель администрирования, чтобы клиенту было удобно. Уж точно не менее удобно, чем на вордпрессе.
Клиенту нужны:
В то же время, заказчик имеет устоявшийся фирменный стиль, поэтому инструмент для изменения логотипов на сайте не нужен.
Структура сайта и меню также не будет изменяться каждый день, поэтому, инструмент для администрирования меню и передвижения блоков на главной делать не будем.
В качестве основы для панели администрирования сайта возьмем Sonata Admin.
Установка самой панели прошла прекрасно, минут за 5 максимум, но нужно еще доставить управление пользователями. Нам же не нужно, чтобы админка была доступна всем и без пароля?
Установка модуля для управления пользователями (sonata-project/user-bundle) прошла поинтереснее. Инструкция тут. Если при установке Sonata Admin автоматически применяются пара рецептов, и ничего дополнительно настраивать не нужно, то тут пришлось все настройки перепроверить и применить вручную. Для справки, версия Symfony — 4.4. Может быть, в последующих версиях что-то исправится, но пока некоторые настройки в инструкции указаны неверно, других — не хватает.
Например, такая ошибка:
лечится такой записью в файле «config/packages/framework.yaml»:
framework:
# ... other stuff ...
templating:
engines: ['twig', 'php']
Также пришлось доставить symfony/swiftmailer-bundle и symfony/acl-bundle.
В целом, изменения файлов конфигурации, в которые пришлось вручную внести изменения, у меня выглядят примерно так:
Не забываем в конце создать админа:
php bin/console fos:user:create --super-admin
В результате всех перечисленных действий у нас получилась такая отличная админка с пользователями:
А это окно логина:
Медиатека в Sonata Admin — это такая прекрасная вещь, которая позволяет закачивать на сайт изображения и другие файлы, создавать из них галереи, а также удобно привязывать эти изображения к сущностям (к статьям, например). А еще мы сможем указать необходимые нам размеры изображений (например, 200×200 для миниатюр), и выводить в шаблонах уже эти уменьшенные изображения.
Пока все перечисленное — повторение функций медиатеки WordPress. А вот чего WordPress «из коробки» не умеет — так это работать с S3.
Инструкция по установке находится тут.
После установки sonata-project/media-bundle, не забываем сгенерировать сущности:
php bin/console sonata:easy-extends:generate --dest=src SonataMediaBundle --namespace_prefix=App
И обновить структуру базы:
php bin/console doctrine:schema:update --force
После этого нужно было внести еще несколько правок в конфиги:
В результате получили отличную админку с медиатекой: