2017-02-22 81 views
0

我正在使用Drupal 8.2.6,并且我想要创建一个会出现在自定义内容类型页面上的块。Drupal 8 - 读取自定义模块中的节点字段值

这是一种预订区块,向访客想要预订产品(自定义内容类型)的网站管理员发送电子邮件。

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

但真正的意义在于发送带有产品对网站管理员的引用的邮件。

当我发现here,我能得到我需要在使用该代码段的值:

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

但我不知道在我的代码范围,我应该使用它。这个例子是为了渲染自定义块中的值,我的情况是用这些值发送邮件。

任何人都可以提醒我,以及如何发送邮件从Drupal 8中的自定义模块?

非常感谢

回答

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 = '[email protected]'; 
    $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模块来了解要使用的属性和方法。

+0

太棒了!现在,您可以通过点击投票模块下方的勾号,将此解决方案标记为您问题的答案,位于此帖子的左侧。 – nyedidikeke