diff --git a/token.module b/token.module index c21a279..5eb111e 100644 --- a/token.module +++ b/token.module @@ -143,21 +143,25 @@ function token_field_info_alter(&$info) { function token_entity_view_display_alter(EntityViewDisplayInterface $entity_display, array $context) { if ($context['view_mode'] == 'token') { /** @var EntityViewDisplayInterface $view_display */ - $view_display = \Drupal::entityManager()->getStorage('entity_view_display') + $view_display = \Drupal::entityTypeManager()->getStorage('entity_view_display') ->load($context['entity_type'] . '.' . $context['bundle'] . '.' . $context['view_mode']); // If the token view mode fell back to the 'default' view mode, then // use the default token formatter. - if (!empty($view_display) && !$view_display->status()) { - $fileTypeManager = \Drupal::service('plugin.manager.field.field_type'); + if (empty($view_display) || !$view_display->status()) { + /** @var \Drupal\Core\Field\FieldTypePluginManager $fieldTypeManager */ + $fieldTypeManager = \Drupal::service('plugin.manager.field.field_type'); + /** @var \Drupal\Core\Field\FormatterPluginManager $formatterManager */ $formatterManager = \Drupal::service('plugin.manager.field.formatter'); - foreach ($entity_display->getComponents() as $field_name => $field_info) { - $field_type_info = FieldStorageConfig::loadByName($context['entity_type'], $field_name); - if (empty($field_type_info)) { - continue; - } - $field_type_definition = $fileTypeManager->getDefinition($field_type_info->getType()); + $components = $entity_display->getComponents(); + foreach ($components as $field_name => $field_info) { + $fields[] = $context['entity_type'] . '.' . $field_name; + } + $field_types = \Drupal::entityTypeManager()->getStorage('field_storage_config')->loadMultiple($fields); + + foreach ($field_types as $field_id => $field_type_info) { + $field_type_definition = $fieldTypeManager->getDefinition($field_type_info->getType()); // If the field has specified a specific formatter to be used by default // with tokens, use that, otherwise use the default formatter. @@ -166,6 +170,9 @@ function token_entity_view_display_alter(EntityViewDisplayInterface $entity_disp // Now that we have a formatter, fill in all the settings. $formatter_info = $formatterManager->getDefinition($formatter); + $field_name = $field_type_info->getName(); + $field_info = $components[$field_name]; + $field_info['type'] = $formatter; $field_info['settings'] = isset($formatter_info['settings']) ? $formatter_info['settings'] : array(); $field_info['settings']['label'] = 'hidden';