Изображения
Изображение

Поле изображения (image) хранится в базе данных в колонке типа INT. В этой колонке хранится ID связанного \Pimcore\Model\Asset\Image.
В отличие от других типов отношений объектов, связь с изображением не сохраняется в таблице relations (это историческое поведение), однако при этом создаётся зависимость в таблице dependencies.
Чтобы программно задать полю объекта изображение, в соответствующий сеттер нужно передать объект \Pimcore\Model\Asset\Image.
$image = Asset\Image::getByPath("/examples/example1.jpg");
$object->setImage($image);
$object->save();
В интерфейсе поле изображения представлено зоной перетаскивания изображения (image drop area). Ширина и высота этой зоны настраиваются в параметрах класса:
Работа с изображениями на фронтенде
Чтобы получить миниатюру (thumbnail) из поля изображения, вызовите метод getThumbnail() у возвращённого объекта ассета.
{% if object.myImage is instanceof('Pimcore\Model\Asset\Image') %}
{{ object.myImage.thumbnail('myThumbnailDefinitionName').html }}
{% endif %}
Поскольку $object->getImage() возвращает объект ассета, доступны все остальные возможности миниатюр, предоставляемые Pimcore\Model\Asset\Image.
Внешнее изображение
Этот тип позволяет указать URL внешнего изображения, которое затем показывается в превью.

{% if object.getExternalImage() is instanceof('\\Pimcore\\Model\\DataObject\\Data\\ExternalImage') %}
<img src="{{ object.getExternalImage().getUrl() }}" />
{% endif %}
Галерея изображений
Галерея — это коллекция объектов Advanced Images (см. ниже). Порядок элементов в галерее можно менять перетаскиванием (drag & drop).

Заполнение галереи изображений
<?php
$galleryData = [
AssetImage,
AssetImage,
//....
];
$items = [];
foreach($galleryData as $img){
$advancedImage = new \Pimcore\Model\DataObject\Data\Hotspotimage();
$advancedImage->setImage($img);
$items[] = $advancedImage;
}
$news->setGallery(new \Pimcore\Model\DataObject\Data\ImageGallery($items));
?>
Расширённое изображение (поддержка Hotspots/Markers/Cropping)
Этот тип данных является расширением базового типа изображения и позволяет определять «hotspots» (зоны интереса), «markers» (маркеры) и обрезку (cropping) для присвоенного изображения.

Hotspot определяется именем и хранится в виде массива с атрибутами name, top, left, width, height. Значения top, left, width, height хранятся в виде процентов от размеров изображения.
Получение Hotspots
Для программного доступа к hotspots можно использовать следующий фрагмент кода.
$hotspotImage = $object->getHotspot1(); // имя поля в классе — "hotspot1"
// получить связанный Asset\Image
$image = $hotspotImage->getImage();
// получить массив всех определённых hotspot
$hotspots = $hotspotImage->getHotspots();
Пример содержимого $hotspots:
Array
(
[0] => Array
(
[name] => hotspot1
[top] => 3.8922155688623
[left] => 48.076923076923
[width] => 8.3333333333333
[height] => 48.802395209581
)
[1] => Array
(
[name] => hotspot2
[top] => 8.9820359281437
[left] => 70.897435897436
[width] => 14.230769230769
[height] => 44.011976047904
)
)
Эти данные можно использовать на фронтенде для визуализации зон интереса.
Получение маркеров (Markers)
Работа с маркерами выполняется по той же схеме:
$hotspotImage = $object->getHotspot1(); // имя поля в классе — "hotspot1"
// получить массив маркеров
$marker = $hotspotImage->getMarker();
Пример содержимого $marker:
Array
(
[0] => Array
(
[top] => 3.8922155688623
[left] => 48.076923076923
)
[1] => Array
(
[top] => 8.9820359281437
[left] => 70.897435897436
)
)
Получение обрезанного изображения
Чтобы получить обрезанное изображение, используйте метод getThumbnail():
$hotspotImage = $object->getHotspot1(); // имя поля в классе — "hotspot1"
echo $hotspotImage->getThumbnail(); // вернёт обрезанное изображение с оригинальными размерами
echo $hotspotImage->getThumbnail("myCustomThumbnail"); // вернёт обрезанную миниатюру согласно настройке миниатюр (аналогично $this->image() в документе)
Миниатюра изображения
Конечно, вы можете использовать приведенный выше код независимо от того, обрезано изображение или нет:
$hotspotImage->getThumbnail("myCustomThumbnail"); // если $hotspotImage не содержит информации об обрезке, миниатюра вернётся как обычно (см. $assetImage->getThumbnail("..."); )
Заполнение расширённого типа изображения
$image = Asset::getById(123);
$advancedImage = new DataObject\Data\Hotspotimage();
$advancedImage->setImage($image);
// ...
$object->setMyAdvancedImage($advancedImage);
Предопределённые шаблоны данных
Кроме пустого стандартного шаблона, в определении класса можно задать JSON-конфигурацию, описывающую дополнительные пользовательские шаблоны. Эти шаблоны будут отображаться как пункты выпадающего меню в интерфейсе «add marker» / «add hotspot».
{
"marker": [{
"menuName": "marker config 1",
"name": "hotspot name",
"data": [{
"name": "my asset href",
"type": "asset",
"value": "/screenshots/glossary.png"
}, {
"name": "my textfield",
"type": "textfield"
}]
}],
"hotspot": [{
"menuName": "hotspot config 1"
}]
}
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.