Перейти к основному содержимому

Блоки

Тип данных блок выступает в роли простого контейнера для других полей данных. Аналогично 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]);


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.