<?php
namespace Maxia\MaxiaVariantsTable6\Core\Content\VariantsTable\Column;
use Shopware\Core\Content\Product\SalesChannel\SalesChannelProductEntity;
use Shopware\Core\Content\Seo\SeoUrlPlaceholderHandlerInterface;
use Shopware\Core\Framework\Adapter\Twig\TemplateFinder;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Framework\Routing\RequestTransformer;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Twig\Environment;
class ColumnRenderer
{
/** @var SalesChannelContext */
protected $salesChannelContext;
/** @var ContainerInterface */
protected $container;
/** @var string */
protected $templatePrefix = '@Storefront/storefront/plugins/maxia_variants_table/columns/';
/** @var Environment */
protected $twig;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function render(
Column $column,
SalesChannelProductEntity $product,
SalesChannelProductEntity $parentProduct,
SalesChannelContext $salesChannelContext,
array $parameters = [])
{
$value = $column->getDataMapping()
? $column->getDataMapping()->getValue($product, $parentProduct, $salesChannelContext)
: null;
$parameters = array_merge($parameters, [
'column' => $column,
'value' => $value,
'product' => $product,
'parentProduct' => $parentProduct,
'context' => $salesChannelContext
]);
$event = new ColumnRenderEvent($column, $product, $parameters, $salesChannelContext);
$this->container->get('event_dispatcher')->dispatch($event);
$template = $column->getTemplate() ?: 'default.html.twig';
$template = $this->templatePrefix . $template;
$content = $this->renderTemplate($template, $event->getParameters(), $salesChannelContext);
return trim($content);
}
public function renderTemplate(string $template, array $parameters, SalesChannelContext $salesChannelContext)
{
/** @var Request $request */
$request = $this->container->get('request_stack')->getCurrentRequest();
$view = $this->container->get(TemplateFinder::class)->find($template, false, null);
$content = $this->getTwig()->render($view, $parameters);
$host = $request->attributes->get(RequestTransformer::STOREFRONT_URL) ?? $request->getHttpHost();
/** @var SeoUrlPlaceholderHandlerInterface $seoUrlReplacer */
$seoUrlReplacer = $this->container->get(SeoUrlPlaceholderHandlerInterface::class);
return $seoUrlReplacer->replace($content, $host, $salesChannelContext);
}
public function setTwig(Environment $twig)
{
$this->twig = $twig;
}
public function getTwig()
{
return $this->twig;
}
}