Drupal 9:在定制的确认信中列出订购的项目

问题描述 投票:0回答:0

我使用一个简单的自定义模块在 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 给我内存错误。

请帮助我获取订购商品的清单(标题、单价、数量、总价和图片(如果可能))并将其用于此确认信中。谢谢。

php drupal
© www.soinside.com 2019 - 2024. All rights reserved.