PAGE Structure (v2)
PAGE (данни за страница)
- id – вътрешно уникално ID
- n – номер на страница (Maksoft CMS)
- type – тип съдържание
page | post | product | offer | testimonial | faq | system | stream_item
- status – статус на публикуване
- name – кратко име (меню)
- title – SEO заглавие
- url – пълен адрес
- parent_id – родителска страница (0 = корен)
- order – ред на подредба
- page_type – семантичен тип страница
- view_mode – режим на визуализация
content (съдържание)
- text – plain текст
- html – пълно HTML съдържание, както е въведено/рендерирано
- sections – извлечени семантични секции от
html
- excerpt – кратък откъс
- description – описание (за meta/preview)
content.sections
sections е асоциативен масив със стандартни и разширяеми semantic slots. Секциите се извличат от HTML блокове с класове:
<section class="section section-hero">...</section>
<section class="section section-solution">...</section>
<section class="section section-faq">...</section>
Примерна структура:
$page['content']['sections'] = [
'hero' => '',
'main' => '',
'intro' => '',
'problem' => '',
'solution' => '',
'benefits' => '',
'features' => '',
'proof' => '',
'offer' => '',
'action' => '',
'faq' => '',
'summary' => '',
'content' => '',
'related' => '',
'gallery' => '',
'specs' => '',
'price' => '',
'delivery' => '',
'testimonial' => '',
'reviews' => '',
'logos' => '',
'notice' => '',
'error' => '',
'success' => ''
];
- main съдържа HTML-а, който остава след извличането на
section-* блоковете.
- Повтарящи се секции от един тип се обединяват в същия slot в реда на срещане.
- Нови секции са позволени без промяна в структурата.
content.html остава наличен непроменен за обратна съвместимост.
Пример за ползване в тема:
<?= $page['content']['sections']['hero'] ?>
<?= $page['content']['sections']['main'] ?>
<?= $page['content']['sections']['solution'] ?>
<?= $page['content']['sections']['action'] ?>
meta (SEO данни)
- title – SEO title
- description – SEO description
- keywords – масив ключови думи
- tags – суров текст с тагове
media (медия ресурси)
main_image (основна снимка)
- id – ID на медия
- kind – тип медия (image/video/other)
- src – URL / път
- alt – alt текст
origin (произход медия)
- type –
local | external | proxy
- provider – име на източник
- original_url – оригинален URL
prices (списък с цени)
Масив с ценови обекти.
breadcrumbs (навигационна пътека)
Масив от:
streams (потоци съдържание)
Масив от Stream обекти.
Потоците се рендерират последователно от темата.
Stream
- id – идентификатор на потока
- kind –
relation | group | feed | search | custom
- binding –
strong | weak | virtual
- role – семантична роля
subpages | group_pages | feed_items | search_results | related | custom
Stream: children (директни подстраници)
- kind = relation
- binding = strong
items → Card[]
Stream: group_pages (страници от асоциирана група)
- kind = group
- binding = weak
group (данни за група)
- id – ID група
- title – име група
items → Card[]
Stream: feeds (външни потоци)
Масив от StreamFeed.
StreamFeed
- id – ID feed
- kind – feed
- binding – virtual
- source –
db | http | api
- type – тип достъп (rss/json/api/custom)
- url – адрес на API / източник
cache (правила за кеширане)
- ttl_sec – време на живот
- stale_while_revalidate_sec – подновяване
index (правила за индексиране)
- enabled – включено/изключено
- key – ключ за индекс
items → Card[]
raw (debug данни)
- kept – пази ли се raw
- hash – версия / хеш
Card (унифициран елемент)
Всички items в streams използват единен модел Card.
- id – уникален ключ
- n – номер в Maksoft (ако има)
- type – тип карта
page | article | product | place | custom
- title – заглавие
- url – линк
- summary – кратко резюме
media (за карта)
main_image → Media
origin (произход на картата)
- stream – от кой поток идва
- source –
db | http
- binding –
strong | weak | virtual
- group_id – ID група (ако е group)
- feed_id – ID feed (ако е feed)
meta (карта)
- external_canonical – каноничен външен URL
children (preview под-елементи)
- items – масив от Card (лек preview модел)
extensions
Engine-specific данни (например extensions.ms)
show_group_id (Maksoft специфично)
Поле в PAGE, което указва асоциирана група.
- Ако > 0 → генерира се stream group_pages
Йерархичен приоритет при рендериране
- search_results (ако съществува)
- children (subpages)
- group_pages
- feed_items
- custom
Темата може да пропуска, но редът е препоръчителен.
Основни принципи
- PAGE управлява display
content.html остава пълният HTML източник
content.sections е semantic extraction layer за темите
- Streams нямат display логика
- Card е унифициран публичен модел
- Media е отделен унифициран обект
- Йерархията чрез parent_id е задължителна
- Virtual страници използват същата PAGE структура
- Extensions изолират Maksoft-specific данни