google_tag-8.x-1.x-dev/src/Plugin/GoogleTag/Event/Commerce/ViewItemEvent.php
src/Plugin/GoogleTag/Event/Commerce/ViewItemEvent.php
<?php declare(strict_types=1); namespace Drupal\google_tag\Plugin\GoogleTag\Event\Commerce; use Drupal\commerce_product\Entity\ProductVariationInterface; use Drupal\commerce_store\CurrentStoreInterface; use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\google_tag\Plugin\GoogleTag\Event\EventBase; use Symfony\Component\DependencyInjection\ContainerInterface; /** * View item event plugin. * * @GoogleTagEvent( * id = "commerce_view_item", * event_name = "view_item", * label = @Translation("View item"), * description = @Translation("This event signifies that some content was shown to the user. Use this event to discover the most popular items viewed."), * dependency = "commerce_product", * context_definitions = { * "item" = @ContextDefinition("entity:commerce_product_variation") * } * ) * * @todo allow support of generic purchasable entity types. */ final class ViewItemEvent extends EventBase implements ContainerFactoryPluginInterface, CacheableDependencyInterface { use CommerceEventTrait; /** * Current store. * * @var \Drupal\commerce_store\CurrentStoreInterface */ private CurrentStoreInterface $currentStore; /** * {@inheritDoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { $instance = new self($configuration, $plugin_id, $plugin_definition); $instance->currentStore = $container->get('commerce_store.current_store'); return $instance; } /** * {@inheritDoc} */ public function getData(): array { // @todo leverage config for token replacement. $item = $this->getContextValue('item'); assert($item instanceof ProductVariationInterface); $item_data = [ 'item_name' => $item->label(), 'item_id' => $item->getSku(), 'affiliation' => $this->currentStore->getStore()->label(), ]; return [ 'currency' => $item->getPrice()->getCurrencyCode(), 'value' => $this->formatPriceNumber($item->getPrice()), 'items' => [ $item_data, ], ]; } }