Ми налаштовували архітектуру контенту для десятків проектів на Craft CMS і знаємо, як уникнути переробок. Неправильний вибір типу Section або Entry Type призводить до того, що через місяць доводиться переробляти структуру URL, шаблони та міграції. Наприклад, якщо спочатку обрали Channel для каталогу товарів, а потім знадобилася ієрархія (категорії глибиною 3 рівні), доведеться міняти тип на Structure, переносити всі записи, налаштовувати редиректи зі старих URL на нові. Це години роботи та ризики для SEO. Розуміння різниці між типами Sections скорочує час проектування та спрощує підтримку.
Зверніться до нас — ми гарантуємо правильну конфігурацію з урахуванням усіх нюансів вашого проекту.
Типи Sections
| Тип Section | Характеристика | Приклад використання |
|---|---|---|
| Channel | Колекція записів без ієрархії | Блог, новини, відгуки |
| Structure | Ієрархічні сторінки, ручне сортування | Документація, каталог з підкатегоріями |
| Single | Один унікальний запис, без slug | Homepage, About, Contact |
Channel — колекція записів без ієрархії. Блог, новини, товари, вакансії. URL будується як /blog/{slug}. Ідеальний для стрічки однотипного контенту. Всередині можна використовувати різні Entry Types — наприклад, для статей та подкастів.
Structure — ієрархічні сторінки з можливістю вкладеності та ручного сортування. Документація, каталог з підкатегоріями. URL: /services/web-development/landing-pages. Structure краще Channel, коли потрібна вкладеність — наприклад, для каталогу товарів з підкатегоріями глибиною до 3 рівнів. При цьому запити до дерева можуть стати вузьким місцем — використовуйте кешування або level() у Twig для обмеження вибірки.
Single — один унікальний запис. Homepage, About, Contact. Немає slug, немає архіву. Використовується для статичних сторінок. Зверніть увагу: якщо знадобиться кілька версій (наприклад, сторінка для кожного сайту в мультисайтовому режимі), використовуйте Section типу Structure з одним записом — це дасть більше гнучкості.
Як вибрати тип Section?
Вибір залежить від характеру контенту. Для плоских колекцій використовуйте Channel, для ієрархій — Structure, для унікальних сторінок — Single. Якщо сумніваєтеся, почніть з Channel — це найгнучкіший варіант, який легко розширити при необхідності. Але пам'ятайте: міграція з Channel на Structure трудомістка, тому краще одразу продумати можливе ускладнення структури.
Що таке Entry Types і як їх налаштовувати?
Кожен Section може мати кілька Entry Types з різними наборами полів. Це дозволяє гнучко керувати контентом різних форматів в одній секції. Приклад для Section Blog:
Section: blog (Channel) ├── Entry Type: article │ └── Fields: body (Matrix), readingTime (calculated), podcast (false) ├── Entry Type: podcast │ └── Fields: audioFile (Asset), transcript (Redactor), duration (Number) └── Entry Type: video └── Fields: videoUrl (URL), thumbnail (Asset), youtubeId (computed) У Twig розділяємо відображення за типом:
{% switch entry.type.handle %} {% case 'article' %} {% include '_blog/_article' %} {% case 'podcast' %} {% include '_blog/_podcast' %} {% case 'video' %} {% include '_blog/_video' %} {% endswitch %} Як налаштувати Project Config для секцій?
Використовуйте YAML-файли для конфігурації секцій — це спрощує розгортання та контроль версій. Зверніться до офіційної документації Project Config. Приклад для блогу:
# config/project/sections/blog.yaml name: Blog handle: blog type: channel enableVersioning: true defaultPlacement: end propagationMethod: all siteSettings: default: hasUrls: true uriFormat: 'blog/{slug}' template: blog/_entry enabledByDefault: true entryTypes: article: name: Article handle: article hasTitleField: true titleTranslationMethod: site fieldLayout: - type: craft\fieldlayoutelements\TitleField - type: craft\fieldlayoutelements\CustomField fieldUid: [uid-of-body-field] - type: craft\fieldlayoutelements\CustomField fieldUid: [uid-of-categories-field] Як налаштувати Structure з вкладеністю?
Для Structure вкажіть maxLevels, щоб обмежити глибину. Наприклад, для трирівневого каталогу:
Section: services (Structure) ├── maxLevels: 3 ├── enableVersioning: true └── defaultSort: structure (ручне сортування в дереві) Запит дочірніх елементів:
{# Отримати всіх нащадків поточної сторінки #} {% set children = craft.entries() .section('services') .descendantOf(entry) .level(entry.level + 1) .orderBy('lft asc') .all() %} Як налаштувати переклади для секцій?
При мультисайтовості важливо правильно налаштувати translationMethod:
| Метод | Опис | Приклад |
|---|---|---|
| none | Єдине значення для всіх сайтів | Назва бренду |
| site | Своє значення для кожного сайту | Назва товару |
| language | Своє значення для кожної мови | Текст мовою |
| siteGroup | Своє значення для групи сайтів | Регіональні налаштування |
Вибір методу залежить від сценарію. Наприклад, для поля "назва товару" використовуйте site, якщо товар локалізовано, або none, якщо назва загальна для всіх мов.
Практичний прийом: кешування структури
Щоб уникнути N+1 запитів при рендерингу дерева, використовуйте{% cache %} або попереднє завантаження записів за допомогою with(). Для великих каталогів (1000+ записів) розгляньте Elasticsearch або Meilisearch для повнотекстового пошуку.
Чому варто замовити налаштування секцій у нас?
Наш досвід — 5+ років розробки на Craft CMS, понад 50 успішних проектів. Ми використовуємо перевірені конфігурації, гарантуємо стабільність та продуктивність. Налаштування 5–8 секцій з Entry Types займає 1–2 дні. Для комплексної архітектури контенту зв'яжіться з нами — ми оцінимо ваш проект за 1 день.
Що входить у налаштування?
- Розробка архітектури Sections та Entry Types
- Конфігурація Project Config (YAML)
- Налаштування полів та перекладів
- Створення базових шаблонів відображення
- Документація зі структури контенту
- Підтримка після запуску
Отримайте консультацію з вашого проекту — ми підберемо оптимальну архітектуру.







