Предварительный генератор
Краткое содержание
Предварительные генераторы предоставляют услуги, чтобы получить больше контроля над вкладкой Preview. Они предоставляют компонент пользовательского интерфейса для передачи дополнительных параметров в генератор URL.
Поставщики должны реализовать: \Pimcore\Model\DataObject\ClassDefinition\PreviewGeneratorInterface
As of Pimcore 10.6, a default implementation of a
PreviewGeneratoris provided. You only need to add a Генератор ссылок. The generated URL will then be used for the preview.
Параметры, возвращаемые в методе getParams, будут отображаться в виде ящика SELECT.
Все, что выберет пользователь, будет передаваться в метод generatePreviewUrl.
Предоставьте генератор предварительного просмотра в настройках класса:

Пример реализации предварительной проведийной провидера
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'
]
];
}
}

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