我使用一个简单的自定义模块在 Drupal 9 Commerce 2 中发送自定义订单状态的确认电子邮件。该模块位于 modules/custom/my_newmodule/src/EventSubscriber 中,它位于一个 php 文件中:
<?php
namespace Drupal\my_newmodule\EventSubscriber;
use Drupal\state_machine\Event\WorkflowTransitionEvent;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Mail\MailManagerInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Sends an email when the order transitions to Fulfillment.
*/
class OrderProcessSubscriber implements EventSubscriberInterface {
use StringTranslationTrait;
/**
* The language manager.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected $languageManager;
/**
* The mail manager.
*
* @var \Drupal\Core\Mail\MailManagerInterface
*/
protected $mailManager;
/**
* Constructs a new OrderFulfillmentSubscriber object.
*
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* The language manager.
* @param \Drupal\Core\Mail\MailManagerInterface $mail_manager
* The mail manager.
*/
public function __construct(
LanguageManagerInterface $language_manager,
MailManagerInterface $mail_manager
) {
$this->languageManager = $language_manager;
$this->mailManager = $mail_manager;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events = [
'commerce_order.process.post_transition' => ['sendEmail', -100],
];
return $events;
}
/**
* Sends the email.
*
* @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
* The transition event.
*/
public function sendEmail(WorkflowTransitionEvent $event) {
// Create the email.
$order = $event->getEntity();
$to = $order->getEmail();
$myTime = $order->getPlacedTime();
$myplaced = date("m-d-Y", $myTime);
$params = [
'from' => $order->getStore()->getEmail(),
'subject' => $this->t(
'Regarding your order [#@number]',
['@number' => $order->getOrderNumber()]
),
'body' => ['#markup' => $this->t(
'
Order Summary:<br><br>
Order: @number<br>
Order Date: @placed<br>
Total paid: @paid<br><br>
',
[
'@number' => $order->getOrderNumber(),
'@placed' => $myplaced,
'@paid' => $order->getTotalPaid(),
]
)],
];
// Set the language that will be used in translations.
if ($customer = $order->getCustomer()) {
$langcode = $customer->getPreferredLangcode();
}
else {
$langcode = $this->languageManager->getDefaultLanguage()->getId();
}
// Send the email.
$this->mailManager->mail('commerce', 'receipt', $to, $langcode, $params);
}
}
我可以添加订单号、订单日期和总支付字段,但我无法添加订购商品列表。我尝试了我所知道的一切,甚至试图针对 $order->getItems() 实现一些递归函数来获取它的字段,但没有成功。我什至不明白如何查看其中的可用字段列表。 print_r 给我内存错误。
请帮助我获取订购商品的清单(标题、单价、数量、总价和图片(如果可能))并将其用于此确认信中。谢谢。