Drupal → Отправить уведомление о новом заказе в Commerce 2

23.01.2020

Во втором комерце практически все хуки заменили на события, поэтому теперь вместо реализации hook_commerce_checkout_complete() надо подписываться на событие commerce_order.place.post_transition:

1.

// src/EventSubscriber/ModulenameEventSubscriber.php

namespace Drupal\modulename\EventSubscriber;

use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\state_machine\Event\WorkflowTransitionEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ModulenameEventSubscriber implements EventSubscriberInterface {

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events['commerce_order.place.post_transition'][] = ['onCheckoutComplete', -100];
    return $events;
  }

  /**
   * Checkout complete event callback.
   */
  public function onCheckoutComplete(WorkflowTransitionEvent $event) {
    $order = $event->getEntity(); /** @var OrderInterface $order */
    \Drupal::service('plugin.manager.mail')->mail(
      'modulename',
      'checkout_complete_notify',
      'to@gmail.com',
      \Drupal::languageManager()->getDefaultLanguage()->getId(),
      ['order' => $order]
    );
  }

}

2.

// modulename.module

/**
 * Implements hook_mail().
 */
function modulename_mail(string $key, array &$message, array $params) {
  if ($key == 'checkout_complete_notify') {
    $order = $params['order']; /** @var OrderInterface $order */

    $message['subject'] = 'Order #' . $order->id();
    $message['body'][] = $order->toUrl('canonical', ['absolute' => TRUE])->toString();
  }
}

3.

# modulename.services.yml

services:
  modulename.event_subscriber:
    class: Drupal\modulename\EventSubscriber\ModulenameEventSubscriber
    tags:
      - { name: event_subscriber }
Написанное актуально для
Drupal Commerce 2
Похожие записи

Добавить комментарий