Drupal 8 - 读取自定义模块中的节点字段值
Drupal 8 - Reading node fields values within a custom module
我正在使用 Drupal 8.2.6,我想创建一个将显示在自定义内容类型页面上的块。
这是一种预订块,它向站点管理员发送电子邮件,告知访问者想要预订产品(自定义内容类型)。
我假设我需要一个仅由提交按钮和呈现表单的块组成的表单。
但真正的重点是将包含产品参考的邮件发送给网站管理员。
正如我发现的 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 = '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 模块检查您的字段了解要使用的属性和方法。
我正在使用 Drupal 8.2.6,我想创建一个将显示在自定义内容类型页面上的块。
这是一种预订块,它向站点管理员发送电子邮件,告知访问者想要预订产品(自定义内容类型)。
我假设我需要一个仅由提交按钮和呈现表单的块组成的表单。
但真正的重点是将包含产品参考的邮件发送给网站管理员。
正如我发现的 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 = '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 模块检查您的字段了解要使用的属性和方法。