Блоковете в страница са независими части информация, преместваеми в рамките съдържанието на всяка страница, които позволяват вграждането и позиционирането на отделни функционалности и части информация в различните редактируеми елементи на страницата.
Реализацията е свързана с 3 таблици
block_types дефинира глобално наличните типове.
page_blocks казва: този тип блок е разрешен за този сайт/страница.
page_blocks_data казва: този разрешен блок е реално включен в страница X, на позиция Y.
block_typesОписва глобалните типове блокове и техните зависимости.
| Поле | Тип | Описание |
|---|---|---|
block_type_id |
INT AUTO_INCREMENT | Уникален идентификатор на типа блок |
block_key |
VARCHAR(50) | Уникален код на типа (напр. hero, custom, gallery) |
block_name |
VARCHAR(100) | Име за показване в админ панела |
description |
TEXT | Подробно описание на предназначението на типа |
icon_class |
VARCHAR(50) | Bootstrap икона за визуализация в админ интерфейса |
css_assets |
TEXT | Външни CSS ресурси (от cms_assets.php), разделени със запетая |
js_assets |
TEXT | Външни JS зависимости |
php_init |
TEXT | Глобален PHP код за инициализация на типа блок |
editable_fields |
JSON | Определя кои полета поддържа блокът (напр. ["init","html","css","js","php","data"]) |
created_at |
TIMESTAMP | Дата на създаване |
updated_at |
TIMESTAMP |
Последна промяна |
page_blocksОписва кои типове блокове са разрешени за конкретен сайт и/или страница (каталог на достъпните блокове).
| Поле | Тип | Описание |
|---|---|---|
blk_id |
INT AUTO_INCREMENT | Уникален идентификатор на разрешения блок |
site_id |
INT DEFAULT 0 | ID на сайта (0 = публичен, достъпен за всички сайтове) |
page_n |
INT DEFAULT 0 | ID на страницата, за която блокът е разрешен (0 = глобален в сайта) |
block_type_id |
INT NOT NULL | Връзка към block_types |
block_key |
VARCHAR(100) | Уникален ключ за блока (напр. promo_banner, custom_footer) |
block_name |
VARCHAR(100) | Име за админ интерфейса |
config_json |
JSON | Настройки/параметри за блока |
| access_level | INT | Ниво на достъп, необходимо за използване на блока. 0 = общодостъпен (гости), 1+ = минимално ниво на потребителя, което му позволява да вижда/редактира блока. |
sort_order |
INT DEFAULT 0 | Ред на показване в админ списъка (не влияе на рендеринга) |
is_active |
TINYINT DEFAULT 1 | Статус на блока (1 = активен, 0 = неактивен) |
created_at |
TIMESTAMP | Дата на създаване |
updated_at |
TIMESTAMP | Последна промяна |
page_blocks_dataСъдържа реалните инстанции на блокове, включени от потребителя в страниците и определя реда им на визуализация.
| Поле | Тип | Описание |
|---|---|---|
data_id |
INT AUTO_INCREMENT | Уникален идентификатор на инстанцията |
blk_id |
INT NOT NULL | Връзка към page_blocks (кой блок е инстанциран) |
site_id |
INT NOT NULL | ID на сайта |
page_n |
INT NOT NULL | ID на страницата |
lang_id |
INT DEFAULT 0 | Езикова версия |
data_json |
JSON | Съдържание на блока (init, css, html, php, js, data и др.) |
sort_order |
INT NOT NULL | Редът, в който блокът се визуализира в рамките на страницата. |
block_types, page_blocks и page_blocks_data.
Таблицата block_types дефинира глобалните типове блокове и техните зависимости (CSS, JS, init PHP и конфигурационни полета).
Таблицата page_blocks описва кои блокове от даден тип са разрешени за конкретен сайт или страница и служи като каталог, от който потребителят избира.
Таблицата page_blocks_data съдържа реалните инстанции на блоковете, които потребителят е включил на страница, с тяхното съдържание (init, css, html, php, js) и позиция (sort_order).
При визуализация CMS-ът зарежда активните инстанции от page_blocks_data, изпълнява init кодовете, обединява CSS и JS ресурсите от block_types, и рендерира HTML съдържанието в зададения ред.
Наличен е универсален loader render_engine_file() (HTML/PHP + {{placeholders}})