我问自己如何做以下事情:
系统中的每个用户都有一个头像(用户帐户中的媒体字段)。
我使用群组模块来构建“组织”。每个组织都有成员。当用户添加到组织时,管理员可以选择是否向添加的成员添加“头像”。头像字段在关系里
目标如下:
如果关系中设置了头像,则使用它; 如果没有,请使用用户个人资料中的标准头像;
我使用 hook_preprocess_group_relationship 实现了一个自定义模块,并检查当前关系是否包含头像,如果不包含头像,我想将用户配置文件中的头像附加到“内容”数组。但我不知道该怎么做...
实际上我使用以下代码:
if (!isset($variables['content']['field_avatar']['#theme'])) {
$user = $gr->getEntity();
$medias = $user->get('field_user_avatar')->referencedEntities();
if (count($medias)) {
$media = $medias[0];
$render = \Drupal::entityTypeManager()->getViewBuilder('media')->view($media, 'default');
$variables['content']['field_avatar'] = $render;
}
}
原来的field_avatar内容是一个“主题字段”,但我替换的内容是一个媒体,所以它不显示它。
关于如何管理替换以模仿相同用途的想法?
提前致谢。
好的...五分钟前我发现了这个线程:https://drupal.stackexchange.com/questions/240002/how-to-apply-a-field-formatter-to-a-node-field-programmatically
它适用于我的情况:
if (!isset($variables['content']['field_avatar']['#theme'])) {
$user = $gr->getEntity();
$medias = $user->get('field_user_avatar')->referencedEntities();
if (count($medias)) {
$view = \Drupal::entityTypeManager()->getViewBuilder('user')->viewField($user->get('field_user_avatar'), 'default');
$variables['content']['field_avatar'] = $view;
}
}