我正在使用Drupal 8.2.6,我想创建一个显示在自定义内容类型页面上的块。
这是一种预订模块,它向网站管理员发送一封电子邮件,以便访问者预订产品(自定义内容类型)。
我假设我需要一个只包含提交按钮和呈现表单的块的表单。
但真正的重点是发送带有产品引用网站管理员的邮件。
当我找到here时,我可以使用此代码段获取所需的值:
if ($node = \Drupal::routeMatch()->getParameter('node')) {
$field_my_custom_value = $node->field_my_custom_value->value;
}
但我不确定我应该在哪个范围的代码中使用它。此示例用于在自定义块中呈现值,我的情况是发送带有值的邮件。
有人能提醒我如何从Drupal 8中的自定义模块发送邮件吗?
非常感谢
答案 0 :(得分:0)
所以,在经过一整天的文档记录之后,我自己解决了这个问题,这里有解决方案,因为我要将我的问题还给早期版本,以防万一有需要。
因此,鉴于上述问题中的代码片段,我在buildForm()
函数中声明了变量
public function buildForm(array $form, FormStateInterface $form_state) {
$field_value = '';
if ($node = \Drupal::routeMatch()->getParameter('node')) {
$field_value = $node->field_name->value;
}
$form['field_value'] = array(
'#type' => 'value',
'#value' => $field_value,
);
// And then you add the definition for other form items and submit button
}
要使用该值发送邮件,请使用$form_state
检索值,如下所示:
public function submitForm(array &$form, FormStateInterface $form_state) {
$module = 'your_module_name';
$key = 'any_key_you_would_like';
$to = 'receiver@email.address';
$langcode = 'en';
$params = array(
'body' => 'Node is booked',
'subject' => $form_state->getValue('field_value'),
);
$mailer = \Drupal::service('plugin.manager.mail');
$mailer->mail($module, $key, $to, $langcode, $params, NULL, TRUE);
}
从节点获取某些值非常棘手,例如使用$node->getTitle()
而不是$node->field_name->value
的节点标题,因此您希望使用Drupal 8的Devel +检查字段Kint模块知道要使用哪些属性和方法。