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

Работа с ассетами через PHP API

Pimcore предоставляет объектно-ориентированный PHP API для работы с ассетами.

Операции CRUD

Ниже приведены строки кода, показывающие простые операции CRUD для ассетов.

//создание и сохранение нового ассета  
$newAsset = new \Pimcore\Model\Asset();
$newAsset->setFilename("myAsset.png");
$newAsset->setData(file_get_contents("some-file.png"));
$newAsset->setParent(\Pimcore\Model\Asset::getByPath("/"));

// необязательный параметр позволяет передать дополнительную информацию
// в настоящее время поддерживается:
// * versionNote: заметка, добавляемая к версии (см. вкладку версий)
$newAsset->save(["versionNote" => "my new version"]);

//получение ассетов
$asset1 = \Pimcore\Model\Asset::getById(3456);
$asset2 = \Pimcore\Model\Asset::getByPath("/my-assets/sample.png");

//обновление ассетов
$asset1->setData(file_get_contents("some-updated-file.png"));
$asset1->save();

//удаление ассетов
$asset2->delete();

Списки ассетов

С помощью Asset\Listing можно получать и фильтровать списки ассетов. Наиболее важные методы: setCondition, setOffset, setLimit, setOrderKey, setOrder.

$list = new \Pimcore\Model\Asset\Listing();  
$list->setCondition("...");
$list->setOrderKey("filename");
$list->setOrder("DESC");
$list->load();

Также обратите внимание на списки объектов и списки документов.

Пользовательские настройки

Пользовательские настройки/свойства могут быть добавлены программно к любому ассету. Это в основном используется для плагинов или аналогичных случаев.

$asset = Asset::getById(2345);  
$settings = $asset->getCustomSettings();
$settings["mySetting"] = "this is my value this can be everythin also an array or an object not only a string";
$asset->setCustomSettings($settings);
$asset->save();

Использование (локализованных) метаданных ассетов

Метаданные ассетов позволяют прикреплять локализованные метаданные к ассетам в Pimcore. Эти метаданные могут быть доступны через API и, следовательно, использованы на всех каналах вывода.

Примеры

Получение данных

Метаданные для ассета можно получить, используя метод getMetadata класса Asset. Он может принимать следующие необязательные параметры:

  1. $name (string) если передан, возвращает метаданные с указанным именем, иначе возвращает все метаданные.
  2. $language (string) с этим параметром можно отфильтровать метаданные по конкретному языку.
  3. $strictMatchLanguage (boolean) если true, пытается получить только метаданные, которые точно соответствуют запрошенному языку без учёта механизма fallback.
  4. $raw (boolean) если true, также вернёт дополнительную информацию, такую как имя, данные, язык и тип ввода метаданных.

Чтобы узнать ожидаемые возвращаемые значения, можно посмотреть тесты внутри tests/Model/Asset/Metadata/NormalizerTest::testLocalizedMetaData

$asset = Asset::getById(123);  

// получить заголовок для текущего языка (атрибут запроса `_locale`)
$asset->getMetadata("title");

// получить английский заголовок
$asset->getMetadata("title", "en");
// если для "en" нет заголовка, но есть заголовок без языка, он будет возвращён (механизм fallback).

// получить все доступные метаданные
$asset->getMetadata();

// получить все доступные метаданные для конкретного языка вместе с метаданными, у которых язык не задан
$asset->getMetadata(null, 'en');

// получить исключительно все метаданные, имеющие конкретный язык
$asset->getMetadata(null, 'en', true);

// получить метаданные в сыром формате, т.е. включая тип ввода метаданных, язык, значение и имя
$asset->getMetadata('title', null, true, true);

Установка данных
// Установить английский заголовок
$asset->addMetadata("title", "input", "the new title", "en");

Удаление данных
// Удалить английский заголовок
$asset->removeMetadata("title", "en");

// Удалить заголовок во всех языках
$asset->removeMetadata("title", "*");

Предопределённые системные метаданные

На ассете могут быть предопределённые и поля по умолчанию. Это значит, что эти поля имеют специальное значение и будут использованы в других местах.

Изображение (image asset)

Существуют 3 поля по умолчанию: title, alt и copyright. Содержимое этих полей будет использовано как значения по умолчанию для атрибутов alt и title в любом теге <img>, генерируемом Pimcore для соответствующего изображения.

Это включает, например:

// встраиваемое изображение в документах  
{{ pimcore_image("myImage", {"thumbnail": "xyz"}) }}

{# генератор HTML миниатюр #}  
{{ asset.getThumbnail("xyz").getHtml()|raw }}
{{ object.getMyImage().getThumbnail("xyz").getHtml()|raw }}

Поле copyright будет добавлено ко всем атрибутам title и alt, разделённое символом |.



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