Разработка сайта на 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% времени на контент-менеджменте.







