Во втором комерце практически все хуки заменили на события, поэтому теперь вместо реализации 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
Похожие записи
- AJAX в форме корзины Commerce 2
- Как в #ajax callback сгенерировать новую форму чтобы ей не мешали GET и POST данные текущего запроса
- Пример модуля для импорта товаров в Drupal Commerce 2
- Добавляем возможность использовать токены в адресе получателя контактной формы
- Views фильтр "товар имеет опубликованную вариацию"
Добавить комментарий