问题描述
在 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 (将#修改为@)