Налаштування Entry Types та Sections Craft CMS
Sections та Entry Types — фундамент структури контенту в Craft CMS. Неправильна архітектура на цьому рівні приводить до переробки через місяць. Розуміння різниці між типами Sections скорочує час проектування.
Типи Sections
Channel — колекція записів без ієрархії. Блог, новини, товари, вакансії. URL будується як /blog/{slug}.
Structure — ієрархічні сторінки з можливістю вложеності та ручної сортування. Документація, каталог із підкатегоріями. URL: /services/web-development/landing-pages.
Single — одна унікальна запис. Домашня сторінка, About, Contact. Немає slug, немає архіву.
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)
# 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 з вложеністю
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— своє значення для групи сайтів
Налаштування 5–8 секцій із Entry Types займає 1–2 дні.







