Pimcore REST API: Create object with block

594 views Asked by At

I'm trying to create a new object via the pimcore rest api.

The object that I'm trying to create contains blocks. The object is created but the content, that should appear in the block is not created.

{
"className": "TrainingCourseMaterial",
"parentId": -1,
"key": "Slides",
"published": true,
"data": {
    "elements": [{
        "type": "block",
        "value": [{
                "contentlanguage": "de",
                "slides": [{
                        "image__image": 1859,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1860,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1861,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1862,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1863,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1864,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1865,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1866,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1867,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1868,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    },
                    {
                        "image__image": 1869,
                        "image__hotspots": {
                            "hotspots": [],
                            "marker": [],
                            "crop": []
                        }
                    }
                ]
            }

        ],
        "name": "SlidesBlock",
        "language": null
    }]
}
}

Not sure if this is even possible. Last resort would be to use the admin api.

1

There are 1 answers

0
Eugene Kaurov On

It is possible as documented: https://pimcore.com/docs/platform/Pimcore/Objects/Object_Classes/Data_Types/Blocks/ https://pimcore.com/docs/platform/Pimcore/Objects/Object_Classes/Data_Types/Image_Types/#get-the-cropped-image

Something like:

<?php
use Pimcore\Model\DataObject\TrainingCourseMaterial;
use Pimcore\Model\DataObject\BlockElement;
use Pimcore\Model\DataObject\Slide;
use Pimcore\Model\DataObject\HotspotImage;
use Pimcore\Model\DataObject\Marker;
use Pimcore\Model\DataObject\Crop;

// Create a new instance of TrainingCourseMaterial class
$trainingCourseMaterial = new TrainingCourseMaterial();

// Set the attributes of the data object
$trainingCourseMaterial->setKey('Slides');
$trainingCourseMaterial->setPublished(true);

// Create a new BlockElement
$blockElement = new BlockElement();
$blockElement->setType('block');
$blockElement->setName('SlidesBlock');
$blockElement->setLanguage(null);

// Create slide objects
$slide1 = new Slide();
$slide1->setImageImage(1859);

// Create hotspot image objects for slide 1
$hotspotImage1 = new HotspotImage();
$hotspotImage1->setX(100);
$hotspotImage1->setY(200);
$hotspotImage1->setWidth(50);
$hotspotImage1->setHeight(50);

$hotspotImage2 = new HotspotImage();
$hotspotImage2->setX(300);
$hotspotImage2->setY(400);
$hotspotImage2->setWidth(50);
$hotspotImage2->setHeight(50);

$hotspotImage1->setHotspots([]);
$hotspotImage2->setHotspots([]);

$slide1->setHotspots([$hotspotImage1, $hotspotImage2]);
$slide1->setMarker(new Marker());
$slide1->setCrop(new Crop());

$slide2 = new Slide();
$slide2->setImageImage(1860);
$slide2->setHotspots([]);
$slide2->setMarker(new Marker());
$slide2->setCrop(new Crop());

// Add more slides as needed

// Add slides to the BlockElement
$blockElement->setSlides([$slide1, $slide2 /* add more slides here */]);

// Set the elements array for the TrainingCourseMaterial object
$trainingCourseMaterial->setElements([$blockElement]);

// Save the data object
$trainingCourseMaterial->save();