Страницы и блоки
Обзор
- Scope
- pages, page_sections, page_translations, PageViewAssembler и режимы контент-редактора
Ключевые понятия
- Full Slug
- Уникальный URL-путь, сгенерированный из пути секции страницы и slug страницы.
- Editor Mode
- Режим контента страницы; PageViewAssembler имеет явные ветки blocks и rich.
- Base Block
- Блок в pages.data_json со стабильным id, type, zone и data payload.
- Translation Block Override
- Локализованные data, сопоставленные с базовым блоком по id и смерженные в data этого блока.
Структура
- Tables
- Page Sections
- parent_id
- name
- slug
- sort
- is_active
- Pages
- section_id
- slug
- full_slug
- status
- published_at
- editor_mode
- layout_key
- view_path
- allowed_roles
- data_json
- derived_meta
- Page Translations
- page_id
- locale
- title
- excerpt
- data_json
- content_overrides
- seo
- Page Sections
- Services
- Assemblyapp/Page/PageViewAssembler.php
- Layoutsapp/Page/Layouts/
- Blocksapp/Page/Blocks and app/Services/Cms/Engine/Blocks
- Rich Editorapp/Services/Cms/Engine/EditorJs
Факты
- page_sections поддерживает опциональную self-parent связь, уникальные sibling slug'и и индексацию parent/sort. authoritative
- При сохранении Page пересчитывается full_slug; pages.full_slug уникален, также pages обеспечивает уникальность пар section_id/slug. authoritative
- Страницы по умолчанию сохраняют draft status, timestamp публикации, SEO index/follow boolean'ы, allowed roles, глобальные data и derived metadata. authoritative
- Page translations уникальны для page и locale и хранят title, excerpt, локализованные data, content overrides и SEO data. authoritative
- Page::visibleOnSite оставляет страницы без site-связей видимыми везде и включает связанные страницы только для запрошенного Site. authoritative
- BlockMerger нормализует базовые и локализованные block-документы, сопоставляет блоки по id и мержит только переведённые data в базовый блок. authoritative
- PageViewAssembler резолвит зарегистрированный layout и его content view; режим blocks передаёт смерженные блоки, режим rich нормализует и рендерит Editor.js data. authoritative
Инструкции
Create Localized Block Page
- создать или выбрать section и page с layout_key и editor_mode
- сохранить базовые блоки со стабильными id в page data
- создать одну page translation на локаль с text/data overrides по id базового блока
- резолвить через PageViewAssembler и проверить выбранную локаль
Change Page Layout
- проверить, что целевой layout зарегистрирован и view для его mode существует
- смапить существующие page data на контракт целевого layout/block
- сохранить layout_key и отрендерить preview перед публикацией
Правила
Architectural rule
Сохраняйте стабильные id базовых блоков между локалями, потому что локализованные block data резолвятся по id.
Architectural rule
Ключ layout страницы должен резолвиться в зарегистрированный layout с view для его editor mode; иначе публичный рендеринг вернёт service-unavailable error.