Розробка веб-сайту на CMS Concrete CMS
Concrete CMS (до 2021 року — concrete5) — CMS з вбудованим інлайн-редактором: контент редагується прямо на сторінці без окремого бекенду. Архітектура заснована на PHP з компонентами Symfony та Doctrine ORM. Блочна система дозволяє формувати сторінки з готових елементів без знання коду.
Сильні сторони для розробки
Concrete CMS має сенс вибирати, коли:
- заказчик або його команда самі правлять контент без технічних знань
- потрібна гнучка система сторінок з різними макетами
- вимагається ієрархія сайтів з різними правами для різних розділів
- проект передбачає складну систему дозволів на рівні сторінок
Архітектура сайту
Concrete CMS організує контент у дерево сторінок. Кожна сторінка має тип сторінки з набором областей, у кожну область додаються блоки (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 тижнів |







