Drupal 8 - 读取自定义模块中的节点字段值

时间:2017-02-22 09:14:33

标签: php email drupal drupal-8

我正在使用Drupal 8.2.6,我想创建一个显示在自定义内容类型页面上的块。

这是一种预订模块,它向网站管理员发送一封电子邮件,以便访问者预订产品(自定义内容类型)。

我假设我需要一个只包含提交按钮和呈现表单的块的表单。

但真正的重点是发送带有产品引用网站管理员的邮件。

当我找到here时,我可以使用此代码段获取所需的值:

if ($node = \Drupal::routeMatch()->getParameter('node')) {
  $field_my_custom_value = $node->field_my_custom_value->value;
}

但我不确定我应该在哪个范围的代码中使用它。此示例用于在自定义块中呈现值,我的情况是发送带有值的邮件。

有人能提醒我如何从Drupal 8中的自定义模块发送邮件吗?

非常感谢

1 个答案:

答案 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模块知道要使用哪些属性和方法。