微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法从 Drupal Commerce 2 中的当前会话购物车中获取 order_id

如何解决无法从 Drupal Commerce 2 中的当前会话购物车中获取 order_id

在 Drupal 9.1.4 和 Commerce 2 中工作:我正在尝试根据用户的电子邮件地址为用户创建一个用于 discord Access 的唯一代码字符串。我有一个只读的自定义字段 discord_code 附加到认商店中的订单类型注册认小部件应该在放置时将代码写入订单。只有一个订单 - 注册订单。最终,我需要为匿名用户登录用户获取与订单关联的电子邮件。 CurrentUser 不是一个选项,因为对于匿名客户,购买将输入与 currentUser 不同的电子邮件。这是一团糟:

<?PHP

/**
 * @file
 * Contains \Drupal\discord_code\Plugin\Field\FieldWidget\discordCodeDefaultWidget.
 */

namespace Drupal\discord_code\Plugin\Field\FieldWidget;

use Drupal\commerce_order\Entity\Order;
use Drupal\commerce_order\Entity\OrderItem;
use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Plugin implementation of the 'discordcodes_default' widget.
 *
 * @FieldWidget(
 *   id = "discordcodes_default",*   label = @Translation("discordCode default"),*   field_types = {
 *     "discord_code"
 *   }
 * )
 */
class discordCodeDefaultWidget extends WidgetBase {

/**public function getorderEmail(OrderInterface $order) {
 $eml = isset($eml) ?  $eml : $order->getEmail();
 return $eml;
 }
/**
 * {@inheritdoc}
 */
public function formElement(FieldItemListInterface $items,$delta,array $element,array &$form,FormStateInterface $form_state) {
include 'Code.PHP';
$cart_provider = \Drupal::service('commerce_cart.cart_provider');
$cart = $cart_provider->getCart('default');
$order_id = $cart->get('order_id')->getValue();
$order= \Drupal\commerce_order\Entity\Order::load($order_id);
$eml=$order->getEmail();
$element['discord_code'] = array(
'#title' => $this->t('discord Code'),'#type' => 'textfield','#attributes' => array('readonly' => 'readonly'),'#default_value' => isset($items[$delta]->discord_code) ?  $items[$delta]->discord_code : t('@dcode',array ('@dcode' => disCode($eml))),);
return $element;
}
}

非常感谢任何见解。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。