<?php declare(strict_types=1);
namespace EsmConfigurator\Storefront\Subscriber;
use Shopware\Storefront\Event\StorefrontRenderEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Wbm\TagManagerEcomm\Cookie\CustomCookieProvider;
use Wbm\TagManagerEcomm\Services\DataLayerModules;
use Wbm\TagManagerEcomm\Services\DataLayerRenderer;
use Wbm\TagManagerEcomm\Utility\SessionUtility;
class WbmTagManagerFixSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
StorefrontRenderEvent::class => ['onRender', -5],
];
}
/**
* Wenn ich einen konfigurierten Artikel in den Warenkorb lege und direkt vom Warenkorb Widget aus auf „Warenkorb anzeigen“ gehe erhalte ich eine Fehlermeldung vom Tag Manager Plugin,
* wenn ich davor einmal mit dem identischen Artikel am Checkout war funktioniert es.
*
* Overrides WbmTagManagerEcomm -> dataLayer variable should be a json, but it's an array -> twig can't render arrays
* This only happens if an article with an upgrade is added to the basket and then the user opens the basket directly afterwards
*/
public function onRender(StorefrontRenderEvent $event): void
{
if(array_key_exists('dataLayer', $event->getParameters()) && is_array($event->getParameters()['dataLayer'])) {
$dataLayer = $event->getParameters()['dataLayer'];
try {
// Remove empty product
unset($dataLayer['ecommerce']['add']['products'][1]);
}catch (\Throwable $e) {}
$event->setParameter('dataLayer', json_encode($dataLayer));
}
}
}