问题描述
我正在尝试将 2 个额外的表单字段添加到愿望清单共享表单中,用户输入将在电子邮件中呈现。我已经能够将字段添加到表单中,但我不确定如何在电子邮件树枝模板中添加用户的输入。
这是我更新 form() 函数的方式:
public function form(array $form,FormStateInterface $form_state) {
$form['#tree'] = TRUE;
$form['#attached']['library'][] = 'core/drupal.dialog.ajax';
// Workaround for core bug #2897377.
$form['#id'] = Html::getId($form_state->getBuildInfo()['form_id']);
$form['to'] = [
'#type' => 'email','#title' => $this->t('Recipient Email'),'#required' => TRUE,];
// COMBAK my edit
$form['sender_name'] = [
'#type' => 'textfield','#title' => $this->t('Your Name'),'#required' => FALSE,];
$form['sender_message'] = [
'#type' => 'textarea','#title' => $this->t('Your Message'),];
// COMBAK eo my edit
return $form;
}
/**
* {@inheritdoc}
*/
protected function actions(array $form,FormStateInterface $form_state) {
$actions['submit'] = [
'#type' => 'submit','#value' => $this->t('Send email'),'#submit' => ['::submitForm'],];
if ($this->isAjax()) {
$actions['submit']['#ajax']['callback'] = '::ajaxSubmit';
}
return $actions;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form,FormStateInterface $form_state) {
/** @var \Drupal\commerce_wishlist\Entity\WishlistInterface $wishlist */
$wishlist = $this->entity;
$to = $form_state->getValue('to');
// COMBAK: my added vars
$sender_name = $form_state->getValue('sender_name');
$sender_message = $form_state->getValue('sender_message');
$this->wishlistShareMail->send($wishlist,$to,$sender_name,$sender_message);
$this->messenger()->addStatus($this->t('Shared the wishlist to @recipient.',[
'@recipient' => $to,]));
$form_state->setRedirectUrl($wishlist->toUrl('user-form'));
}
public function send(WishlistInterface $wishlist,$sender_message) {
$owner = $wishlist->getowner();
$subject = $this->t('Check out my @site-name wishlist',[
'@site-name' => $this->configFactory->get('system.site')->get('name'),]);
$body = [
'#theme' => 'commerce_wishlist_share_mail','#wishlist_entity' => $wishlist,// COMBAK: my added vars
'#sender_name' => $sender_name,'#sender_message' => $sender_message,];
$params = [
'id' => 'wishlist_share','from' => $owner->getEmail(),'wishlist' => $wishlist,];
return $this->mailHandler->sendMail($to,$subject,$body,$params);
}
这是商业愿望清单模块提供的预处理功能:
function template_preprocess_commerce_wishlist_share_mail(array &$variables) {
/** @var Drupal\commerce_wishlist\Entity\WishlistInterface $wishlist */
$wishlist = $variables['wishlist_entity'];
$wishlist_url = $wishlist->toUrl('canonical',['absolute' => TRUE]);
$variables['wishlist_url'] = $wishlist_url->toString();
// COMBAK: my added vars
//$sender_name = $variables['sender_name'];
}
最后是电子邮件本身的树枝模板:
{#
/**
* @file
* Template for the wishlist share email.
*
* Available variables:
* - wishlist_entity: The wishlist entity.
* - wishlist_url: The wishlist url.
*
* @ingroup themeable
*/
#}
<p>
{% trans %}Check out my wishlist!{% endtrans %}
</p>
<p>
{% trans %}I use my wishlist for keeping track of items I am interested in.{% endtrans %} <br>
{% trans %}To see the list in the store and buy items from it,<a href="{{ wishlist_url }}">click here</a>.{% endtrans %}
</p>
<p>
{% trans %}Thanks for having a look!{% endtrans %}
</p>
我一直无法弄清楚如何访问我添加到树枝模板中 body[] 数组的变量。
任何帮助将不胜感激。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)