Разработка сайта на CMS Concrete CMS
Concrete CMS (до 2021 года — concrete5) — CMS с встроенным инлайн-редактором: контент редактируется прямо на странице без отдельного бэкенда. Архитектура основана на PHP с компонентами Symfony и Doctrine ORM. Блочная система позволяет формировать страницы из готовых элементов без знания кода.
Сильные стороны для разработки
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) — метаданные страницы, не привязанные к блокам:
// Получить атрибут страницы
$metaDesc = $c->getAttribute('meta_description');
$heroImage = $c->getAttribute('hero_image');
// В шаблоне темы
<meta name="description" content="<?= h($metaDesc) ?>">
<?php if ($heroImage): ?>
<div class="hero" style="background-image: url('<?= $heroImage->getURL() ?>')"></div>
<?php endif; ?>
Типы атрибутов: текст, textarea, boolean, select, image, file, дата, геолокация, рейтинг, URL.
Система разрешений
Concrete CMS обладает детальными ACL-правами — вплоть до уровня отдельной страницы:
// Проверка прав в шаблоне
$cp = new Permissions($c);
if ($cp->canEditPageContents()) {
// показать кнопку редактирования
}
// Закрыть страницу для гостей
if (!$u->isLoggedIn()) {
$response = Redirect::to('/login');
$response->send();
exit;
}
Группы пользователей с правами на конкретные области сайта настраиваются без программирования через административный интерфейс.
Многоязычность
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>";
}
Express Objects: структурированные данные
Express (встроен с версии 8) — ORM-подобный механизм для хранения данных вне дерева страниц. Аналог Custom Post Types, но с реляционными возможностями:
// Создание записи Express Object программно
$entry = Express::buildObject('product', 'Products', 'Product');
$entry->addAttribute('text', 'SKU', 'sku');
$entry->addAttribute('number', 'Price', 'price');
$entry->addAttribute('image', 'Photo', 'photo');
$entry->save();
Форма добавления записей генерируется автоматически, доступна через блок Express Form.
SEO и производительность
// Кастомный SEO в шаблоне
use Concrete\Core\Page\Page;
use Concrete\Core\Html\Service\Html;
$html = $app->make(Html::class);
$seoTitle = $c->getAttribute('seo_title') ?: $c->getCollectionName();
// Кэширование страниц включается в Dashboard → System → Cache
// Полное кэширование: Full Page Caching (Blocks)
Типовая структура проекта
| Компонент | Путь |
|---|---|
| Тема | 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/ |
Сроки разработки
| Объём | Описание | Срок |
|---|---|---|
| Небольшой сайт | 5–8 типов страниц, стандартные блоки | 2–4 недели |
| Корпоративный портал | 10–15 типов, кастомные блоки | 5–9 недель |
| Мультиязычный сайт | 3+ языка, Express objects | 8–14 недель |







