Генератор предварительного просмотра
Краткое содержание
Генераторы предварительного просмотра предоставляют сервисы для получения большего контроля над вкладкой предварительного просмотра. Они предоставляют компонент пользовательского интерфейса для передачи дополнительных параметров генератору URL-адресов.
Провайдеры должны реализовывать \Pimcore\Model\DataObject\ClassDefinition\PreviewGeneratorInterface
Начиная с версии Pimcore 10.6, по умолчанию предоставляется реализация
PreviewGenerator. Вам нужно только добавить Генератор ссылок. Затем сгенерированный URL-адрес будет использован для предварительного просмотра.
Параметры, возвращаемые методом getParams, будут отображаться в виде поля выбора (select box).
Все, что выберет пользователь, будет передано методу generatePreviewUrl.
Предоставьте генератор предварительного просмотра в настройках класса:

Пример реализации PreviewProvider
namespace App\Service\PreviewParamProvider;
use App\Website\LinkGenerator\ProductLinkGenerator;
use Pimcore\Model\DataObject\ClassDefinition\PreviewGeneratorInterface;
use Pimcore\Model\DataObject\Concrete;
class ProductPreviewParamProvider implements PreviewGeneratorInterface
{
protected ProductLinkGenerator $productLinkGenerator;
public function __construct(ProductLinkGenerator $productLinkGenerator)
{
$this->productLinkGenerator = $productLinkGenerator;
}
public function generatePreviewUrl(Concrete $object, array $params): string
{
$additionalParams = [];
foreach($this->getPreviewConfig($object) as $paramStore) {
$paramName = $paramStore['name'];
if($paramValue = $params[$paramName]) {
$additionalParams[$paramName] = $paramValue;
}
}
return $this->productLinkGenerator->generate($object, $additionalParams);
}
public function getPreviewConfig(Concrete $object): array
{
return [
[
'name' => '_locale',
'label' => 'Locale',
'values' => [
'English' => 'en',
'German' => 'de'
],
'defaultValue' => 'en'
],
[
'name' => 'otherParam',
'label' => 'Other',
'values' => [
'Label Text' => 'value',
'Option #2' => 2,
'Custom Option' => 'custom'
],
'defaultValue' => 'value'
]
];
}
}

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