【问题标题】:Drupal 8 - Reading node fields values within a custom moduleDrupal 8 - 在自定义模块中读取节点字段值
【发布时间】:2017-02-22 09:14:32
【问题描述】:

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

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

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

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

当我找到here 时,我可以使用这个 sn-p 获得我需要的值:

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

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

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

非常感谢

【问题讨论】:

    标签: php email drupal drupal-8


    【解决方案1】:

    因此,经过一天的全部文档记录后自己解决了问题,这里是解决方案,因为我将把我的问题恢复到早期的修订版,以防万一有人需要。

    因此,鉴于上述问题中的 sn-p,我在 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 模块检查您的字段以了解哪些属性和方法使用。

    【讨论】:

    • 太棒了!您现在可以通过单击此帖子左侧投票模块下方的勾号,将您的解决方案标记为问题的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    相关资源
    最近更新 更多