Hallo,
in meinem Plugin lade ich ein Bild hoch und möchte dieses Bild in Twig zur Verfügung haben. Wie ich es via Controller in einem Twig Template zur Verfügung stelle, weiß ich. Was mir jedoch nicht klar ist: Wie kann ich die Variable „überall“ zur Verfügung stellen.
Hier mal mein aktueller Stand via eigenem Controller:
„src/Resources/config/config.xml“
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/shopware/platform/trunk/src/Core/System/SystemConfig/Schema/config.xsd">
<card>
<title>Bild</title>
<component name="sw-media-field">
<name>pluginMedia</name>
<label>Upload media or choose one from the media manager</label>
</component>
</card>
</config>
„src/Resources/config/services.xml“
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="MeinPlugin\Storefront\Controller\TestController" public="true">
<call method="setContainer">
<argument type="service" id="service_container"/>
</call>
<argument type="service" id="media.repository"/>
<argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
</service>
</services>
</container>
„src/Resources/config/routes.xml“
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
<import resource="../../Storefront/Controller/**/*Controller.php" type="annotation"/>
</routes>
„src/Storefront/Controller/TestController.php“
<?php
namespace MeinPlugin\Storefront\Controller;
use Shopware\Core\Framework\Routing\Annotation\RouteScope;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Controller\StorefrontController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
/**
* @RouteScope(scopes={"storefront"})
*/
class TestController extends StorefrontController
{
private EntityRepositoryInterface $mediaRepository;
private SystemConfigService $systemConfigService;
public function __construct(
EntityRepositoryInterface $mediaRepository,
SystemConfigService $systemConfigService)
{
$this->mediaRepository = $mediaRepository;
$this->systemConfigService = $systemConfigService;
}
/**
* @Route("/test", name="frontend.testplugin.test", methods={"GET"})
*/
public function showPage(Request $request, SalesChannelContext $salesChannelContext, Context $context): Response
{
$pluginMedia = $this->systemConfigService->get('MeinPlugin.config.pluginMedia');
$image = $this->mediaRepository->search(new Criteria([$pluginMedia]), $context);
return $this->renderStorefront('@MeinPlugin/storefront/page/test/index.html.twig', [
'customString' => $image,
]);
}
}
„src/Resources/views/storefront/page/test/index.html.twig“
{% sw_extends '@Storefront/storefront/base.html.twig' %}
{% block base_content %}
{{ dump( customString ) }}
{% endblock %}
Wenn ich im Frontend nun die Route „meineseite.de/test“ aufrufe, habe ich dort ja „bild“ zur Verfügung.
Was ich jedoch wie gesagt nicht verstehe ist, wie ich es anstelle, dass „bild“ einfach im gesamten Frontend zur Verfügung steht. sodass ich es in jedem Twig Template nutzen kann, welches ich jetzt oder auch in der Zukunft erstelle.
Wäre über jede Hilfe dankbar.