JsonStructure - andreyryabin/sprint.editor GitHub Wiki
Структура содержимого редактора
В структуре основные 2 подраздела layouts и blocks
"blocks" - список блоков с указанием позиции их в сетке layout
"layouts" - список сеток, сетка состоит из нескольких колонок с классами
"version": 2 - чтобы различать старый вариант структуры от текущей, для совместимости
"packname": "" - название макета, если эту структуру сохранить как макет
внутри содержимого блока помимо основных данных хранится позиция его в сетке layout": "0,0" - первая сетка, первая колонка и settings - значения пользовательских настроек
{
"name": "blockName",
"settings": {
"param1": "style1"
}
}
Пример содержимого редактора
{
"packname": "",
"version": 2,
"blocks": [
{
"type": "h1",
"value": "Заголовок 1",
"anchor": "zagolovok-1",
"name": "htag",
"layout": "0,0"
},
{
"value": "Текст 1<br>",
"name": "text",
"layout": "0,0"
},
{
"file": {
"ID": "1709",
"WIDTH": 0,
"HEIGHT": 0,
"SRC": "\/upload\/resize_cache\/sprint.editor\/190\/200_200_2\/190a844a7f61af59ca957028172aec5a.jpg",
"ORIGIN_SRC": "\/upload\/sprint.editor\/190\/190a844a7f61af59ca957028172aec5a.jpg"
},
"desc": "",
"name": "image",
"layout": "0,1"
},
{
"url": "https:\/\/www.youtube.com\/watch?v=m9IA1MFyk74",
"width": "100%",
"height": "480",
"name": "video",
"preview": {
"file": [],
"desc": ""
},
"layout": "1,0"
},
{
"images": [
{
"file": {
"ID": "1710",
"WIDTH": 0,
"HEIGHT": 0,
"SRC": "\/upload\/resize_cache\/sprint.editor\/abd\/98_55_2\/abd12247830197f5f47e6752925a9f0c.png",
"ORIGIN_SRC": "\/upload\/sprint.editor\/abd\/abd12247830197f5f47e6752925a9f0c.png"
},
"desc": ""
},
{
"file": {
"ID": "1711",
"WIDTH": 0,
"HEIGHT": 0,
"SRC": "\/upload\/resize_cache\/sprint.editor\/5f0\/98_55_2\/5f099bea2675f09d45fa22820c855580.png",
"ORIGIN_SRC": "\/upload\/sprint.editor\/5f0\/5f099bea2675f09d45fa22820c855580.png"
},
"desc": ""
},
{
"file": {
"ID": "1712",
"WIDTH": 0,
"HEIGHT": 0,
"SRC": "\/upload\/resize_cache\/sprint.editor\/96d\/98_55_2\/96da381ab26e46ff9f50018dee81f3b8.png",
"ORIGIN_SRC": "\/upload\/sprint.editor\/96d\/96da381ab26e46ff9f50018dee81f3b8.png"
},
"desc": ""
},
{
"file": {
"ID": "1713",
"WIDTH": 0,
"HEIGHT": 0,
"SRC": "\/upload\/resize_cache\/sprint.editor\/655\/98_55_2\/6557466d1ece0de2c43a9563b7612716.png",
"ORIGIN_SRC": "\/upload\/sprint.editor\/655\/6557466d1ece0de2c43a9563b7612716.png"
},
"desc": ""
}
],
"name": "gallery",
"layout": "1,0"
}
],
"layouts": [
{
"settings":[],
"columns": [
{
"css": "col-md-6"
},
{
"css": "col-md-6"
}
]
},
{
"settings":[],
"columns": [
{
"css": "col-md-12"
}
]
}
]
}
Примеры работы со структурой через апи модуля
https://github.com/andreyryabin/sprint.editor/blob/master/examples/Example1.php
Пример 1
Собираем все заголовки в одну строку
CModule::IncludeModule('sprint.editor');
use Sprint\Editor\Structure\Structure;
$structure = (new Structure())->fromJson('{...}');
$content = '';
foreach ($structure->getBlocks() as $block) {
if ($block->getName() == 'htag') {
$content .= $block->getDataByKey('value') . ' ';
}
}
return $content;
Пример 2
Меняем данные первого текстового блока в первой колонке
CModule::IncludeModule('sprint.editor');
use Sprint\Editor\Structure\Structure;
$structure = (new Structure())->fromJson('{...}');
$structure->getLayoutByIndex(0)
->getColumnByIndex(0)
->getBlockByIndex(0)
->setData(['value' => 'Другой текст']);