Блоки
Тип данных блок выступает в роли простого контейнера для других полей данных. Аналогично field collection, можно создавать неограниченное количество элементов блока.
Элемент блока может быть размещён в localized field, а сам элемент блока также может содержать localized field. Вложение элементов блока друг в друга не поддерживается.


Данные блока по сути сериализуются в одну колонку в базе данных. Следовательно, этот тип контейнера не подходит, если вы планируете выполнять запросы (query) по хранимым внутри блока данным.
Использование в API
Рассмотрим следующее определение класса

и объект данных с блоком (поле blockElement1)

Получение значения второго поля в первом элементе блока:
$object = DataObject\BlockClass::getById(48);
$blockItems = $object->getBlockElement1();
$firstBlockItem = $blockItems[0];
echo($firstBlockItem["input2"]->getData());
Вывод будет: "value2".
Обновление значения выполняется аналогично:
// ... как выше ...
$firstBlockItem["input2"]->setData(time());
$object->save();
Получение значений локализованных полей в блоке:
$object = DataObject\BlockClass::getById(48);
$blockItems = $object->getBlockElement1();
$firstBlockItem = $blockItems[0];
$localizedfields = $firstBlockItem["localizedfields"]->getData();
// далее используйте его так же, как `Pimcore\Model\DataObject\LocalizedField::getLocalizedValue`
Создание блока:
/**
* @var DataObject\Data\BlockElement $blockElement
*
* BlockElement( name, type, data )
*/
$object = DataObject::getById(4);
$data = [
"input1" => new BlockElement('input1', 'input', 'NewValue1'),
"input2" => new BlockElement('input2', 'input', 'NewValue2'),
"myhref" => new BlockElement('myhref', 'manyToManyRelation', [$object])
];
$blockElement = new BlockClass();
$blockElement->setBlockElement1([$data]);
Создание блока с локализованными полями:
$object = DataObject::getById(4);
$data = [
"input1" => new BlockElement('input1', 'input', 'NewValue1'),
"input2" => new BlockElement('input2', 'input', 'NewValue2'),
"myhref" => new BlockElement('myhref', 'manyToManyRelation', [$object]),
"localizedfields" => new BlockElement('localizedfields', 'localizedfields', new Localizedfield([
"de" => [
"localizedInput" => "Mein deutscher Text"
],
"en" => [
"localizedInput" => "My English text"
]
]))
];
$object->setMyBlockField([$data]);
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.