You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal技术问询:如何在邮件模板变量中获取用户first name而非用户名/realname

解决方法:在邮件模板!username变量中获取用户First Name

嘿,我来帮你搞定这个需求!你已经创建了First Name字段并通过LDAP同步了数据,现在要把邮件模板里的!username从realname改成直接取First Name,有几种靠谱的方法:

方法1:直接访问用户实体字段

这是最直接的方式,只要你知道First Name字段的机器名(比如你创建字段时设的field_first_name,记得替换成你实际的机器名),可以修改代码如下:

// 先判断字段是否有值,避免空值或报错
if (!empty($params['account']->field_first_name->value)) {
  $variables['!username'] = $params['account']->field_first_name->value;
} else {
  // 做个降级处理,避免没有First Name时显示空白
  $variables['!username'] = $params['account']->realname ?? $params['account']->name;
}

如果发现$params['account']没有加载字段数据(比如只拿到了基础用户对象),可以先加载完整的用户实体:

$user = \Drupal\user\Entity\User::load($params['account']->id());
if (!empty($user->field_first_name->value)) {
  $variables['!username'] = $user->field_first_name->value;
} else {
  $variables['!username'] = $user->realname ?? $user->name;
}

方法2:使用Drupal令牌系统

你提到有[user:fi...]的令牌,用令牌来获取也是符合Drupal最佳实践的方式,代码示例:

// 加载令牌服务
$token_service = \Drupal::token();
// 替换成你实际的First Name令牌(比如[user:field-first-name])
$first_name = $token_service->replace('[user:field-first-name]', ['user' => $params['account']]);

// 同样做降级处理
$variables['!username'] = !empty($first_name) ? $first_name : ($params['account']->realname ?? $params['account']->name);

小提示

  • 一定要确认你First Name字段的机器名,可以到用户字段管理页面查看;
  • 加上降级逻辑很重要,避免某些用户没有First Name数据时邮件显示空白;
  • 你之前的代码用realname是因为realname是由First Name生成的,但直接取字段值更精准,不会受realname生成规则的影响。

内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:27:18