Drupal 8 - 读取自定义模块中的节点字段值
问题描述:
我正在使用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中的自定义模块?
非常感谢
答
所以,一天的整个价值文档后解决它自己后,这里的解决方案,我要恢复我的早期版本的问题,如果有人需要它。
因此,鉴于上述问题的片断,我宣布在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模块来了解要使用的属性和方法。
太棒了!现在,您可以通过点击投票模块下方的勾号,将此解决方案标记为您问题的答案,位于此帖子的左侧。 – nyedidikeke