commerce_google_tag_manager-8.x-2.0-beta1/src/EventSubscriber/CommerceEventsSubscriber.php

src/EventSubscriber/CommerceEventsSubscriber.php
<?php

namespace Drupal\commerce_google_tag_manager\EventSubscriber;

use Drupal\commerce_cart\Event\CartEntityAddEvent;
use Drupal\commerce_cart\Event\CartEvents;
use Drupal\commerce_cart\Event\CartOrderItemRemoveEvent;
use Drupal\commerce_google_tag_manager\EventTrackerService;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\state_machine\Event\WorkflowTransitionEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

/**
 * Event handler for commerce related events.
 */
class CommerceEventsSubscriber implements EventSubscriberInterface {

  /**
   * The Commerce GTM event tracker.
   *
   * @var \Drupal\commerce_google_tag_manager\EventTrackerService
   */
  private $eventTracker;

  /**
   * The current route match.
   *
   * @var \Drupal\Core\Routing\RouteMatchInterface
   */
  protected $routeMatch;

  /**
   * Constructs the CommerceEventsSubscriber object.
   *
   * @param \Drupal\commerce_google_tag_manager\EventTrackerService $event_tracker
   *   The Commerce GTM event tracker.
   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
   *   The route match, for context.
   */
  public function __construct(EventTrackerService $event_tracker, RouteMatchInterface $route_match) {
    $this->eventTracker = $event_tracker;
    $this->routeMatch = $route_match;
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    return [
      CartEvents::CART_ENTITY_ADD => 'trackCartAdd',
      CartEvents::CART_ORDER_ITEM_REMOVE => 'trackCartRemove',
      'commerce_order.place.post_transition' => 'trackPurchase',
       // trackProductView should run before Dynamic Page Cache, which has
       // priority 27.
       // @see \Drupal\dynamic_page_cache\EventSubscriber\DynamicPageCacheSubscriber.
      KernelEvents::REQUEST => ['trackProductView', 28],
    ];
  }

  /**
   * Track the "addToCart" event.
   *
   * @param \Drupal\commerce_cart\Event\CartEntityAddEvent $event
   *   The add to cart event.
   */
  public function trackCartAdd(CartEntityAddEvent $event) {
    $this->eventTracker->addToCart($event->getOrderItem(), (int) $event->getQuantity());
  }

  /**
   * Track the "productView" event.
   *
   * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
   *   The event to view the product.
   */
  public function trackProductView(GetResponseEvent $event) {
    $product = $this->routeMatch->getParameter('commerce_product');
    if ($event->getRequest()->getMethod() === 'GET' && !empty($product) && $this->routeMatch->getRouteName() === 'entity.commerce_product.canonical') {
      $default_variation = $product->getDefaultVariation();

      if ($default_variation) {
        $this->eventTracker->productDetailViews([$default_variation]);
      }
    }
  }

  /**
   * Track the "cartRemove" event.
   *
   * @param \Drupal\commerce_cart\Event\CartOrderItemRemoveEvent $event
   *   The cart event.
   */
  public function trackCartRemove(CartOrderItemRemoveEvent $event) {
    $this->eventTracker->removeFromCart($event->getOrderItem(), 1);
  }

  /**
   * Track the "purchase" event.
   *
   * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
   *   The workflow transition event.
   */
  public function trackPurchase(WorkflowTransitionEvent $event) {
    /** @var \Drupal\commerce_order\Entity\OrderInterface $order */
    $order = $event->getEntity();
    $this->eventTracker->purchase($order);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc