Разработка сайта на CMS Concrete CMS
Concrete CMS — система с встроенным инлайн-редактором: контент изменяется прямо на странице без отдельного бэкенда. Архитектура основана на PHP с компонентами Symfony и Doctrine ORM. Блочная система позволяет собирать страницы из готовых элементов без написания кода. Мы используем Concrete CMS для проектов, где заказчик самостоятельно обновляет контент и требуется гибкая система прав доступа. За годы работы мы реализовали более 20 проектов на этой CMS, от корпоративных порталов до мультиязычных каталогов. Например, для международной компании настроили 12 типов страниц с индивидуальными правами для редакторов разных отделов — это сократило время согласования контента втрое. Контент-менеджеры экономят до 70% времени: правки вносятся за минуты, а не часы.
Concrete CMS особенно полезна, когда команда заказчика сама правит контент, а структура страниц должна меняться без программирования. По сравнению с классическим WordPress, она даёт более тонкую настройку прав — вплоть до конкретной области на странице. А в отличие от Drupal, имеет интуитивный интерфейс редактирования без необходимости разбираться в таксономиях. Встроенная система ACL настраивается за 1–2 часа, что в 2–3 раза быстрее аналогов, и не требует дополнительных плагинов.
Почему выбирают Concrete CMS?
Заказчик или его команда самостоятельно редактируют контент без технических знаний. Нужна гибкая система страниц с разными макетами. Требуется иерархия сайтов с разными правами для разных разделов. Проект предполагает сложную систему разрешений на уровне страниц — Concrete CMS покрывает все эти сценарии из коробки.
Как устроена архитектура сайта?
Concrete CMS организует контент в дерево страниц. Каждая страница имеет Page Type с набором Areas, в каждую область добавляются блоки (Blocks).
Сайт ├── Главная (page type: home) │ ├── Area: Hero │ │ └── Block: Image Slider │ ├── Area: Content │ │ ├── Block: HTML │ │ └── Block: Feature List (кастомный) │ └── Area: Sidebar │ └── Block: Form ├── Услуги (page type: service-list) │ ├── Разработка (page type: service-detail) │ └── Дизайн (page type: service-detail) └── Контакты (page type: basic-page) Page Types и шаблоны
Page Type создаётся в /application/single_pages/ или через полный тип с шаблоном в теме:
// application/single_pages/services.php // или packages/my-theme/themes/my-theme/page_types/service_detail.php defined('C5_EXECUTE') or die('Access Denied.'); $view = View::getInstance(); ?> <div class="container"> <h1><?= $c->getCollectionName() ?></h1> <?php $a = new Area('Main Content'); $a->display($c); ?> <aside> <?php $sidebar = new Area('Sidebar'); $sidebar->display($c); ?> </aside> </div> Атрибуты страниц и разрешения
Атрибуты (Attributes) — метаданные страницы, не привязанные к блокам. Типы атрибутов: текст, textarea, boolean, select, image, file, дата, геолокация, рейтинг, URL. Система разрешений (ACL) работает на уровне страниц, типов страниц, блоков и файлов. Пример комбинированного использования:
// Получить атрибут страницы и проверить права $metaDesc = $c->getAttribute('meta_description'); $cp = new Permissions($c); if ($cp->canEditPageContents()) { // показать кнопку редактирования } // Закрыть страницу для гостей if (!$u->isLoggedIn()) { $response = Redirect::to('/login'); $response->send(); exit; } ?> <meta name="description" content="<?= h($metaDesc) ?>"> Как реализовать многоязычность?
Concrete CMS поддерживает мультиязычные сайты через Multilingual Sites. Каждая языковая версия — это отдельное поддерево страниц:
/en/ /ru/ /de/ Переключение языка реализуется через блок или шаблон:
$locales = Section::getList(); foreach ($locales as $section) { $url = $section->getRelatedPageInLocale($c); echo "<a href='{$url}'>{$section->getLanguageText()}</a>"; } Как создать кастомный тип страницы?
- Создайте файл шаблона в
application/single_pages/или через пакет. - Определите области (Areas) в PHP-шаблоне.
- Зарегистрируйте тип страницы в админке (Dashboard → Pages & Themes → Page Types).
- Назначьте права доступа для нового типа.
- Добавьте атрибуты, если нужны метаданные.
Этот процесс занимает около 2 часов для простого типа. Для сложных типов с кастомными блоками — до 1 дня.
Что такое Express Objects?
Express (встроен с версии 8) — ORM-подобный механизм для хранения данных, не привязанных к дереву страниц. Аналог Custom Post Types, но с реляционными возможностями. Записи Express можно связывать со страницами и выводить через блок Express Form. Это идеально для каталогов, справочников и других повторяющихся сущностей.
SEO и производительность
Для SEO используем кастомные атрибуты: meta_description, seo_title. Кэширование страниц включается в Dashboard → System → Cache. Полное кэширование (Full Page Caching) ускоряет загрузку в 5–10 раз, снижая TTFB с 500 мс до 50 мс. Concrete CMS — зрелая платформа с развитым сообществом.
Типовая структура проекта
| Компонент | Путь |
|---|---|
| Тема | packages/my-theme/themes/my-theme/ |
| Кастомные блоки | packages/my-theme/blocks/ |
| Шаблоны блоков | application/blocks/{block}/templates/ |
| Типы страниц | packages/my-theme/themes/my-theme/page_types/ |
| Одиночные страницы | application/single_pages/ |
Что входит в разработку?
- установка и настройка CMS на хостинге
- создание кастомной темы (вёрстка + интеграция)
- разработка типов страниц и блоков под задачи проекта
- настройка прав доступа и многоязычности
- импорт контента (если нужен)
- обучение команды заказчика работе с in-context редактором
- гарантия на код и бесплатные правки в течение первого месяца
Оценим ваш проект и предложим сроки от 2 недель для небольшого сайта до 3 месяцев для крупного портала. Закажите консультацию — мы поможем выбрать оптимальную архитектуру и разработаем сайт под ключ.
Сроки разработки
| Объём | Описание | Срок |
|---|---|---|
| Небольшой сайт | 5–8 типов страниц, стандартные блоки | 2–4 недели |
| Корпоративный портал | 10–15 типов, кастомные блоки | 5–9 недель |
| Мультиязычный сайт | 3+ языка, Express objects | 8–14 недель |
Хотите обсудить проект? Получите консультацию — мы оценим сложность и предложим решение, которое сэкономит до 40% времени на контент-менеджменте.







